IOC
Spring中的IOC
Spring中的IOC(一):什么是IOC及Spring中实现IOC的方式(依赖注入)
一:IOC简介:
1. 概念定义:
类之间的依赖关系,不再由类自己去负责,而是由容器根据配置文件去创建实例并维护各个实例之间的依赖关系。
2.优点:
(1):避免了代码的纠缠,(业务逻辑和业务逻辑无关的代码纠缠到一块)代码更容易被维护
(2):模块的耦合性降低
(3):易测试
二:Spring中实现IOC的方式:依赖注入(Dependency Injection)
1:Spring中依赖注入的两种方式:
(1):通过 setter 方法注入:
<property name=“ ” ></property>
其中,name属性的取值依setter方法名而定,要求这个类里面这个对应的属性必须有setter方法
三:容器对bean属性的装配
1. 基本类型和字符串类型属性的装配(value):
<property name="owner">
<value>张三</value>
</property>
2. 引用类型属性的装配
<property>
<ref bean="otherBean" />
</property>
(1)ref: local 只在当前配置文件中找
(2)ref:bean 在所有的配置文件中
(3)直接把另外一个bean的定义,定义在一个bean里面。
相当于定义了个内部类,但是客户端就不可见内部定义的bean
3. 集合类型属性的装配
(1)list:可以混合存放各种类型,支持泛型,存放的数据是有序的,可以有重复,
(2)set:可以混合存放各种类型,支持泛型,存放的数据是无序的,不可以重复
(3)map:支持泛型,存放键值对。
(4)props:本质上也是一个map,但是键值都是字符串类型的。
例子:
<property name="listProperty">
<list>
<value>zhangsan</value>
<value>zhangsan</value>
<value>zhangsan</value>
</list>
</property>
<property name="setProperty">
<set>
<value>str</value>
<value>str</value>
<value>str1</value>
</set>
</property>
<property name="mapProperty">
<map>
<entry key="key1">
<value>value1</value>
</entry>
<entry key="key2">
<value>value2</value>
</entry>
</map>
</property>
<property name="proProperty">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
<prop key="key3">value3</prop>
</props>
</property>
四:bean 的其他属性介绍
1. 自动装配 (bean标签的autowire属性):
作用:不明确配置,自动将某个bean 注入到另一个bean的属性当中
分类:
(1)byname:通过id 的名字来进行匹配,
(2)byType:通过类型来进行匹配
(3)constructor:根据java 源程序中定义的构造方法,再根据类型进行匹配。
(4)autodetect:完全交给spring管理, spring 则再根据constructor à byType的顺序进行匹配。
注:
自动装配的优先级低于手动装配
自动装配一般应用于快速开发中,但是不推荐使用,代码简单,但是一方面容易出错,另一方面也不方便后期的维护
五:bean实例的生命周期及范围
1. Bean的生命周期:
(1)实例化(必须的)构造函数构造对象
(2)装配(可选的)为属性赋值
(3)回调(可选的)(容器-控制类和组件-回调类)
(4)初始化(init-method=" ")
(5)就绪
(6)销毁(destroy-method=" ")
2. bean的范围
Bean:默认情况下,容器是按照单例的方式去创建的bean,如果不想使用那么用(scope=" ")定义bean的使用范围
Bean的范围有(经常使用的是前两种):
(1)Singleton:默认的
(2)Prototype:每次取出的都是新的对象
(3)Request:bean的生命周期和一个http请求一直
(4)session:在一个会话周期中有效
六:IOC中其他接口的使用
1. Beanpostprocessor:(后处理bean)在对象实例化后,进行方法调用前进行特殊处理
2. BeanFactoryPostProcessor:在实例化对象前,对配置文件进行特殊处理
3. PropertyeditorSupport :属性编辑器类
可以根据定义的规则,将字符串类型自动编辑成一个对象类型来进行属性注入。
4. PropertyPlaceholderConfigurer:
方便分散配置的一个类,可以读取配置文件,以${key}获得对应的value值
5. CustomEditorConfigurer:配置用户自定义的属性编辑器
例:
<bean
class="org.springframework.beans.factory.config
.PropertyPlaceholderConfigurer">
<property name="location">
<value>ioc\\info.properties</value>
</property>
</bean>
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config
.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="ioc9.Address">
<bean id="myEditor"class="ioc9.AddressEditor">
</bean>
</entry>
</map>
</property>
</bean>
七:Spring的事件处理机制:(监听机制)
1. 自定义一个事件,需要实现接口ApplicationEvent
2. 定义一个监听器,需要实现接口ApplicationListener
3. bean调用容器的方法,发布事件,需要实接口ApplicationContextAware,来获得对容器的引用