IOC
1.概念
1.1 叫做控制反转,也可以叫做依赖注入
对象之间的依赖关系交给Spring来处理.
对象之间的耦合是通过xml文件来处理.
1.2 优点
模块之间的关系低耦合,容易测试,容易维护.
2.基本使用
2.1首先要挑选合适的容器.
BeanFactory 是Core Spring的工厂,也是最基本的.
ApplicationContext 属于Spring Context.是BeanFactory的子类,用于C/S架构
WebApplicationContext 也是BeanFactory的子类,用于B/S架构
2.2 获得容器
先写配置文件xml,文件名不重要,但是要符合相应的DTD或者Schme;
实例化容器,比如ApplicationContext的就是ClasspathxmlApplicationContext
2.3 装配方式
2.3.1 基于set的装配
2.3.1.1 基本类型
<property name="属性名" value="属性值">
//Spring会自动转换为相应的类型,若强转失败就抛异常
2.3.1.2 对象类型
<property name="属性名">
<ref local="id">//指的是本xml文件内,或者用bean,指的是所有已经被加载的xml文件
</property>
2.3.1.3 集合类型
list
<property name="属性名">
<list>
//里面可以跟基本类型,也可以是对象.可以参考上面.
</list>
Set
就是Set标签,里面跟上面一样,唯一的不同在于若放入相同的元素会被剔除.
map
<key="" value="">
也可以是对象<key-ref="" value-ref="">
若是用local的话,就再加一层标签.
properties
因为是字符串,故会简单很多.
要注意的是,这里的value不能作为标签的属性.
<props>
<prop key="key3">value3</prop>
</props>
</property>
2.3.2 基于构造器
做一个有参构造器.在xml使用<constructor-arg>标签,但一个标签只能是一个形参.
要注意的是,这里的次序不能乱排,要跟有参构造器里的一致.
2.3.3 基于构造器和基于set的区别
构造器的会有循环依赖问题.而且若属性过多,构造器的写法会很繁多.
3.高级使用
3.1 自动装配
根据提示来装配对象,注意,这里只适合对象,当然也可以用基本使用方式来做基本类型的创建.
autowire="byName" 根据属性名来匹配bean的id.
autowire="byType" 根据Set方法的形参属性的类型来跟bean的类型匹配
autowire="constructor" 根据构造方法里的形参类型
autowire="autodetect" 自动选择,若有无参构造方式就用set,不然就用构造方式的(注意,这里的选择是针对基本使用).
3.2 工厂方式的装配
3.2.1 简单工厂
先做好接口和实现类.以及工厂方法
然后写配置文件
这个bean的class要是工厂类,然后增加一个标签factory-method="getcar"
比如
<bean id="car" class="com.calos.test6.CarFactory" factory-method="getCar"/>
1.概念
1.1 叫做控制反转,也可以叫做依赖注入
对象之间的依赖关系交给Spring来处理.
对象之间的耦合是通过xml文件来处理.
1.2 优点
模块之间的关系低耦合,容易测试,容易维护.
2.基本使用
2.1首先要挑选合适的容器.
BeanFactory 是Core Spring的工厂,也是最基本的.
ApplicationContext 属于Spring Context.是BeanFactory的子类,用于C/S架构
WebApplicationContext 也是BeanFactory的子类,用于B/S架构
2.2 获得容器
先写配置文件xml,文件名不重要,但是要符合相应的DTD或者Schme;
实例化容器,比如ApplicationContext的就是ClasspathxmlApplicationContext
2.3 装配方式
2.3.1 基于set的装配
2.3.1.1 基本类型
<property name="属性名" value="属性值">
//Spring会自动转换为相应的类型,若强转失败就抛异常
2.3.1.2 对象类型
<property name="属性名">
<ref local="id">//指的是本xml文件内,或者用bean,指的是所有已经被加载的xml文件
</property>
2.3.1.3 集合类型
list
<property name="属性名">
<list>
//里面可以跟基本类型,也可以是对象.可以参考上面.
</list>
Set
就是Set标签,里面跟上面一样,唯一的不同在于若放入相同的元素会被剔除.
map
<key="" value="">
也可以是对象<key-ref="" value-ref="">
若是用local的话,就再加一层标签.
properties
因为是字符串,故会简单很多.
要注意的是,这里的value不能作为标签的属性.
<props>
<prop key="key3">value3</prop>
</props>
</property>
2.3.2 基于构造器
做一个有参构造器.在xml使用<constructor-arg>标签,但一个标签只能是一个形参.
要注意的是,这里的次序不能乱排,要跟有参构造器里的一致.
2.3.3 基于构造器和基于set的区别
构造器的会有循环依赖问题.而且若属性过多,构造器的写法会很繁多.
3.高级使用
3.1 自动装配
根据提示来装配对象,注意,这里只适合对象,当然也可以用基本使用方式来做基本类型的创建.
autowire="byName" 根据属性名来匹配bean的id.
autowire="byType" 根据Set方法的形参属性的类型来跟bean的类型匹配
autowire="constructor" 根据构造方法里的形参类型
autowire="autodetect" 自动选择,若有无参构造方式就用set,不然就用构造方式的(注意,这里的选择是针对基本使用).
3.2 工厂方式的装配
3.2.1 简单工厂
先做好接口和实现类.以及工厂方法
然后写配置文件
这个bean的class要是工厂类,然后增加一个标签factory-method="getcar"
比如
<bean id="car" class="com.calos.test6.CarFactory" factory-method="getCar"/>