Spring学习之Bean装配、生命周期。。

本文详细介绍了Spring IoC设计的核心概念,包括Bean容器、生命周期管理、装配方式(XML和注解),以及如何在Spring框架下进行Bean的创建、初始化、销毁与装配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,属性占位符配置器等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值