14.笔记JAVA Spring框架学习————Bean生命周期

14.笔记JAVA Spring框架学习————Bean生命周期

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

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

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

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

–      调用 Bean 的初始化方法

–      Bean 可以使用了

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

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

Bean后置处理器

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

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

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

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

–      调用 Bean 的初始化方法

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

–      Bean 可以使用了

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

测试一

在app.xml配置如下:

      <!-- 测试 SpEL: 可以为属性进行动态的赋值(了解)-->

      <bean id="girl"class="User" init-method="init"destroy-method="destroy">

            <property name="userName"value="周迅"></property>

      </bean>

其中init-method指定了初始化函数,destroy-method指定了关闭回调函数。

Main.java内容如下:

import java.sql.SQLException;

 

import javax.sql.DataSource;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.AbstractApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.mchange.v2.c3p0.DataSources;

 

publicclass Main {

     

      publicstaticvoid main(String[]args) throws SQLException {

           

     

            //1. 创建Spring IOC 容器

            ClassPathXmlApplicationContext apx = new ClassPathXmlApplicationContext("app.xml");

            User user = (User) apx.getBean("girl");

            System.out.println(user);

             apx.close();

      }

     

}

其中User.java中是包含init和destory函数的如上篇笔记。

然后执行如下:

User'sConstrutor...

initmethod...

User[userName=周迅, cars=null]

八月 13, 2016 9:32:22 下午 org.springframework.context.support.ClassPathXmlApplicationContextdoClose

信息: Closingorg.springframework.context.support.ClassPathXmlApplicationContext@1a6c5a9e:startup date [Sat Aug 13 21:32:22 CST 2016]; root of context hierarchy

destroymethod...

测试二

Bean后处理使用。

主要是调用postProcessBeforeInitialization,postProcessAfterInitialization函数。

更细腻的进行定制。

先在项目创建一个新类,蛤蟆命名为BeanProcessor.java, Add –>BeanPostProcessor

BeanProcessor.java内容如下:

import org.springframework.beans.BeansException;

importorg.springframework.beans.factory.config.BeanPostProcessor;

 

public class BeanProcessor implementsBeanPostProcessor {

 

                  @Override

                  publicObject postProcessAfterInitialization(Object arg0, String arg1) throwsBeansException {

                                    //TODO Auto-generated method stub

                                   

                                    System.out.println("after"+arg0+ " " + arg1);

                                   

                                    returnarg0;

                  }

 

                  @Override

                  publicObject postProcessBeforeInitialization(Object arg0, String arg1) throwsBeansException {

                                    //TODO Auto-generated method stub

                                   

                                    System.out.println("before"+arg0+ " " + arg1);

                                    returnarg0;

                  }

 

}

在app.xml中定义如下:

      <!-- 测试 SpEL: 可以为属性进行动态的赋值(了解)-->

      <bean id="girl"class="User" init-method="init"destroy-method="destroy">

            <property name="userName"value="周迅"></property>

      </bean>

 

      <!-- 配置 bean 后置处理器: 不需要配置 id 属性, IOC 容器会识别到他是一个 bean 后置处理器, 并调用其方法-->

      <bean class="BeanProcessor"></bean>

Main.java还是和测试一一样如下:

import java.sql.SQLException;

 

import javax.sql.DataSource;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.AbstractApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.mchange.v2.c3p0.DataSources;

 

publicclass Main {

     

      publicstaticvoid main(String[]args) throws SQLException {

           

     

            //1. 创建Spring IOC 容器

            ClassPathXmlApplicationContext apx = newClassPathXmlApplicationContext("app.xml");

            User user = (User) apx.getBean("girl");

            System.out.println(user);

             apx.close();

      }

     

}

执行如下:

User'sConstrutor...

beforeUser[userName=周迅, cars=null] girl

initmethod...

afterUser[userName=周迅, cars=null] girl

User[userName=周迅, cars=null]

八月 13, 2016 10:00:35 下午 org.springframework.context.support.ClassPathXmlApplicationContextdoClose

信息: Closingorg.springframework.context.support.ClassPathXmlApplicationContext@1a6c5a9e:startup date [Sat Aug 13 22:00:35 CST 2016]; root of context hierarchy

destroymethod...

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值