Resource res = new FileSystemResource(" bean.xml"); //实例化文件系统资源bean.xml
BeanFactory factory = new XmlBeanFactory (res);//生成Bean工厂
ApplicationContext:ApplicationContext factory = new ClassPathXmlApplication (" bean.xml ");//生成Application实例
Spring IoC设计(控制反转)的核心是Bean容器,主要实现是指org.springframework.beans包,设计目标是与JavaBean组件一起使用。在Spring中对Bean的概念定义的比较广泛,普通的POJO,或者框架提供的bean都可以作为bean来配置、处理等。
1、Bean容器。管理bean的容器在Spring框架中有两个,BeanFactory和AppilicationContext。BeanFactory实现了工厂模式,提供了对Bean的创建。是最基础最核心的beanb工厂接口,是最高级抽象接口,允许通过名称创建和检索对象。ApplicationContext上下文则继承了BeanFactory接口,并对其进行了扩展,提供了一些更方便更好的方法,如增加了国际化消息,自动注册BeanPostProcessor等功能。他们的实现分别如下:
取得Bean代码如下:
Chinese chinese = (Chinese) factory.getBean(" chinese ");
2、生命周期。Bean的生命周期无非是从定义使用到销毁,具体如下:
BwanPostProcessor的postProcessorBeforeInitialization() -> init-method() -> postProcessorAfterInitialization() -> singleton,prototype -> afterPropertiesSet()销毁.
定义:<bean id = "life" class = "lifecycle.Life" > </bean>
初始化:1)、用ini-method指定初始化方法, <bean id = "life" class = "lifecycle.Life" init-method="init" > </bean>
2)、实现InitializationBean接口,增加接口中的方法afterPropertiesSet()方法。
调用:就是调用bean中的方法。
销毁:和初始化一样,有两种方法。分别是用destroy-method方法配置,或实现DisposebleBean接口。
BeanFactory和ApplicationContext中的Bean生命周期类似。
2、装配。用两种主要的方式,分别是用XML进行装配和用JDK5以后的Annotation注解进行装配。在XML装配中主要有两种方法。即设置注入和构造注入。
注入的原理都是反射,设值注入是利用无参构造方法进行反射实例化,然后调用set方法进行注入。
<bean id="man" class="set.Man" >
<property name="name"><value>Jack</value> </property>
<property name="age" > <value> 24 </value></property>
</bean>
构造注入的原理是通过反射实例化有相关参数的构造方法。和设值注入相比具有更大的依赖关系。为防止出现类型错误,可以指定type,index属性。
<bean id="animal" class="cons.Animal">
<contractor-arg type="java.lang.String" index="0"><value=>Jack</value> </contractor-arg>
<contractor-arg type="int"><value>5</value></contractor-arg>
</bean>
自动装配,可以根据属性名(byName)、属性类型(byType)进行自动装配,属性类型可以使相同的类型,也可以是子类,或者接口关系。
<bean id="building" class="cons.Building " autowire="byName" ></bean>
也可以不作为自动装配的候选者。
<bean id="building" class="cons.Building" autowire-condidate="false"> </bean>
在bean中还有一些特殊的bean,比如可以用于后处理的Bean,BeanPostProcessor,可以分别在Bean处理之前、之后调用。还有一种Bean可以是配置信息分离,有利于管理配置信息的Bean,PropertyPlaceholderConfigurer,属性占位符配置器等。