Spring4.0学习笔记(1) —— 基础知识

1、基本定义

IOC是一种叫做“控制反转”的设计思想。
A、较浅的层次——从名字上解析
“控制”就是指对 对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个对象(创建),在使用过程中保持引用(维护),在失去全部引用后由GC去回收对象(销毁)。
“反转”就是指对 对象的创建、维护、销毁等生命周期的控制由程序控制改为由IOC容器控制,需要某个对象时就直接通过名字去IOC容器中获取。

B、更深的层次——提到DI,依赖注入,是IOC的一种重要实现
一个对象的创建往往会涉及到其他对象的创建,比如一个对象A的成员变量持有着另一个对象B的引用,这就是依赖,A依赖于B。IOC机制既然负责了对象的创建,那么这个依赖关系也就必须由IOC容器负责起来。负责的方式就是DI——依赖注入,通过将依赖关系写入配置文件,然后在创建有依赖关系的对象时,由IOC容器注入依赖的对象,如在创建A时,检查到有依赖关系,IOC容器就把A依赖的对象B创建后注入到A中(组装,通过反射机制实现),然后把A返回给对象请求者,完成工作。依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。

C、IOC的意义何在?
IOC并没有实现更多的功能,但它的存在使我们不需要很多代码、不需要考虑对象间复杂的耦合关系就能从IOC容器中获取合适的对象,而且提供了对 对象的可靠的管理,极大地降低了开发的复杂性。

这里写图片描述

2、原理

这里写图片描述

面向对象的时候

A.依赖

Class A{

}

Class B{
    public void xxx(A a){

}
}

B.继承:is a

Class A{

}
Class B extends A{

}

C.聚合:has a

3 Spring的工厂类

这里写图片描述

3.1 BeanFactory :老版本的工厂类

  • BeanFactory:调用getBean的时候,才会生成类的实例

3.2 ApplicationContext:新版本的工厂类

ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化

ApplicationContext有两个实现类:

  • ClassPathXmlApplicationContext :加载类路径下的配置文件

  • FileSystemXmlApplicationContext :加载文件系统下的配置文件

4 Spring的配置

4.1 Schema的配置

4.2 Bean的相关的配置

4.2.1 <bean>标签的id和name的配置

  • id :使用了约束中的唯一约束。里面不能出现特殊字符的。

  • name :没有使用约束中的唯一约束(理论上可以出现重复的,但是实际开发不能出现的)。里面可以出现特殊字符。

4..2.2 Bean的作用范围的配置(重点)

scope :Bean的作用范围

  • singleton :默认的,Spring会采用单例模式创建这个对象。
  • prototype :多例模式。(Struts2和Spring整合一定会用到)

  • request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。

  • session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。

  • globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。

5 Spring的Bean管理(XML方式)

5.1 Spring的Bean的实例化方式(了解)

Bean已经都交给Spring管理,Spring创建这些类的时候,有几种方式:

5.1.1 无参构造方法的方式(默认)

这里写图片描述

5.1.2 静态工厂实例化的方式
这里写图片描述

5.1.3 实例工厂实例化的方式
这里写图片描述

配置
这里写图片描述

5.2 Spring 的 的 Bean 的属性注入:

【构造方法的方式注入属性】

<!-- 第一种:构造方法的方式 -->
<bean id="car" class="com.bean.Car">
    <constructor-arg name="name" value="宝马"></constructor-arg>
    <constructor-arg name="price" value="1000"></constructor-arg>
</bean>

【set 方法的方式注入属性】

<!-- 第二种:set 方法的方式 -->
<bean id="car" class="com.bean.Car">
    <property name="name" value="保时捷"></property>
    <property name="price" value="2000000"></property>
</bean>

5.3 Spring 的属性注入:对象类型的注入

<!-- 注入对象类型的属性 -->
<bean id="person" class="com.bean.Person">
    <property name="name" value="tracydzf"></property>
    <property name="age" value="18"></property>
    <property name="car" ref="car"></property>
</bean>

5.4名称空间 p 的属性注入的方式:Spring2.x 版本后提供的方式

<!-- p 名称空间的属性注入的方式 -->
<bean id="car" class="com.bean.Car" p:name="兰博基尼" p:price="9999999999"/>
<bean id="person" class="com.bean.Person" p:name="tracydzf" p:age="18" p:car-ref="car"/>

5.5注入复杂类型:

<!-- Spring 的复杂类型的注入===================== -->
<bean id="collectionBean" class="cn.itcast.spring.demo5.CollectionBean">
<!-- 数组类型的属性 -->
<property name="arrs">
<list>
<value>会希</value>
<value>冠希</value>
<value>天一</value>
</list>
</property>
<!-- 注入 List 集合的数据 -->
<property name="list">
<list>
<value>芙蓉</value>
<value>如花</value>
<value>凤姐</value>
</list>
</property>
<!-- 注入 Map 集合 -->
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
<!-- Properties 的注入 -->
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123</prop>
</props>
</property>
</bean>

5.7Spring 的分配置文件的开发
一种:创建工厂的时候加载多个配置文件:

ApplicationContext applicationContext = new
ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

二种:在一个配置文件中包含另一个配置文件:

<import resource="applicationContext2.xml"></import>

猜你喜欢

转载自blog.csdn.net/qq_41955282/article/details/81563427