Spring--4.bean管理(xml)

来源:互联网 发布:如何求矩阵的特征向量 编辑:程序博客网 时间:2024/06/09 16:30

1       常用属性,子标签

1.1  属性

 


1.2  子标签

1.3  作用域--scope属性

使用scope设置作用域

    singleton :默认,单例的,初始化创建bean,整个生命周期只创建一个bean

    prototype :原型的,初始化不创建bean,每次请求创建一个bean,并返回

 

 

1.4  字面值—处理特殊字符

       字面值:可用字符串表示的值,可以通过 <value> 元素标签或 value 属性进行注入。

       若字面值中包含特殊字符,可以使用 <![CDATA[]]> 把字面值包裹起来。

<value><![CDATA[<北京>]]></value>

 

 

2       Bean 的生命周期-- init-method和destroy-method

2.1  生命周期方法

 

       SpringIOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务.

       SpringIOC 容器对 Bean 的生命周期进行管理的过程:

1.        通过构造器或工厂方法创建Bean 实例

2.        为 Bean 的属性设置值和对其他 Bean 的引用

3.        调用 Bean 的初始化方法

4.        Bean 可以使用了

5.        当容器关闭时, 调用 Bean 的销毁方法

       在 Bean 的声明里设置 init-method 和 destroy-method 属性, 为 Bean 指定初始化和销毁方法.

<bean id="car" class="spring.cycle.Car"init-method="init"destroy-method="destory">       <property name="brand"value="奥迪"></property>    </bean> 

2.2  创建 Bean 后置处理器

 

       Bean后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理.

       Bean后置处理器对 IOC 容器里的所有 Bean 实例逐一处理, 而非单一实例. 其典型应用是: 检查 Bean 属性的正确性或根据特定的标准更改 Bean 的属性.

       对Bean 后置处理器而言, 需要实现BeanPostProcessor接口. 在初始化方法被调用前后, Spring 将把每个 Bean 实例分别传递给上述接口的以下两个方法:

 

<!-- 配置bean的后置处理器 -->    <bean class="spring.cycle.MyBeanPostProcessor"></bean>

bean-cycle.xml

<?xml version="1.0"encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd">     <bean id="car"class="spring.cycle.Car" init-method="init" destroy-method="destory">       <property name="brand"value="奥迪"></property>    </bean>     <!--    实现 BeanPostProcessor       postProcessBeforeInitialization(Objectbean, String beanName):init-method()之前       postProcessAfterInitialization(Objectbean, String beanName):init-method()之后       的实现:       bean:bean的实例本身    beanName:IOC容器的 bean 名字    返回值:是实际上返回给用户那个bean,注意:可以修改bean,对应好就行,甚至返回一个新的 bean    -->    <!-- 配置bean的后置处理器:不需要配置ID, IOC容器自动识别是一个  BeanPostProcessor-->    <bean class="spring.cycle.MyBeanPostProcessor"></bean> </beans>

MyBeanPostProcessor

package spring.cycle; import org.springframework.beans.BeansException;importorg.springframework.beans.factory.config.BeanPostProcessor; public class MyBeanPostProcessor implements BeanPostProcessor {     @Override    public Object postProcessAfterInitialization(Object bean, String beanName)           throws BeansException {       System.out.println("postProcessAfterInitialization:" + bean +","+beanName);       Car car = new Car();       car.setBrand("宝马");       return car;    }     @Override    public Object postProcessBeforeInitialization(Object bean, String beanName)           throws BeansException {       System.out.println("postProcessBeforeInitialization:" + bean +","+beanName);                   return bean;    }}
Car
package spring.cycle; public class Car {     private String brand ;       public String getBrand() {       return brand;    }     public void setBrand(String brand) {       System.out.println("为属性赋值:setBrand..."+brand);       this.brand = brand;    }       public Car() {       System.out.println("Car启动...");    }     public void init(){       System.out.println("初始化...");    }       public void destory(){       System.out.println("销毁...");    }     @Override    public String toString() {       return "Car[brand=" + brand + "]";    }}

2.3  添加 Bean 后置处理器后 Bean 的生命周期

过程:

1.        通过构造器或工厂方法创建Bean 实例

2.        为 Bean 的属性设置值和对其他 Bean 的引用

3.        将 Bean 实例传递给 Bean 后置处理器的postProcessBeforeInitialization 方法

4.        调用 Bean 的初始化方法

5.        将 Bean 实例传递给 Bean 后置处理器的postProcessAfterInitialization方法

6.        Bean 可以使用了

7.        当容器关闭时, 调用 Bean 的销毁方法

 

 

 

原创粉丝点击