IOC知识点详细汇总
在Spring的IOC容器里配置Bean。
一,基于XML
id:Bean的名称,必须唯一,id可以指定多个名字,可用逗号,分号,或空格分隔;class为全类名(反射)。也有通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean两种方式,详细总结在下方。
二,基于注解
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。
①使用@Qualifier注解
②声明Bean的时候,bean的名字设置为跟属性名或字段名一样的
三.IOC容器BeanFactory&ApplicationContext概述
(1)Spring提供了两种类型的IOC容器实现
四.依赖注入的方式
有三种:①属性注入②构造器注入③工厂方法注入(很少使用,不推荐)
①属性注入即通过setter方法注入bean的属性值或依赖的对象。使用<property>元素,使用name属性指定bean的属性名称,value属性或<value>子节点指定属性值。
②通过构造方法注入Bean的属性值或依赖的对象,保证了Bean实例在实例化后就可以使用。构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性。
五.注入属性值细节
(1),若字面值中包含特殊字符,可以使用<![CDATA[ ]]把字面值包裹起来。
(2),通过<ref>元素或ref属性为Bean的属性或构造器参数指定对Bean的引用,也可以在属性或构造器里包含Bean的声明,这样的Bean称为内部Bean。当Bean实例仅仅给一个特定的属性使用时,可以将其声明为内部Bean,不需要设置任何id或name属性,因为他不能使用在其他地方。
(3),可以使用<null/>元素标签为Bean的字符串或其他对象类型的属性注入null值
(4),支持级联属性的配置
(5),可以通过一组内置的Xml标签(例如:<List>,<Set>,<Map>)来配置集合属性
(6)使用p命名空间:需要先导入P命名空间,简化了基于XML的配置方式
(7)导入外部文件时:可以在<beans>中添加context schema定义
<context :property-placeholder location=" "/> (Spring 2.5以后)
六.自动装配
Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式
①byType:(根据类型自动装配)若IOC容器中有多个与目标Bean类型一致的Bean,在这种情况下,Spring将无法判断哪个Bean最适合该属性,所以不能执行自动装配。
②byName:(根据名称自动装配)必须将目标Bean的名称和属性名设置的完全相同
③constructor(通过构造器自动装配)不推荐使用,当Bean存在多个构造器时,此种装配方式将会很复杂。
在实际项目里很少使用自动装配功能,因为和自动装配所带来的好处比起来,明确清晰的配置文档更有说服力一些。
七.bean之间的关系:继承与依赖
①继承:使用bean的parent属性指定继承哪个bean的配置 。
八.bean的作用域
九.IOC容器中Bean的生命周期
不需要配置id属性,IOC容器会自动识别。
添加Bean的后置处理器之后的生命周期:
①通过构造器或工厂方法创建Bean实例
十,配置Bean的其他两种方法:
静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例
class:指向静态工厂方法的全类名
factory-method:指向静态工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
实例工厂方法:实例工厂的方法,即需要创建工厂本身,再调用工厂的实例方法来返回Bean的实例。
factory-bean:指向实例工厂方法的Bean。
FactoryBean:需要实现FactoryBean接口。