spring 生命周期

1.car类

package com.hxzy.cycle;


public class Car {


private String brand;

public Car() {
System.out.println("构造器运行");
}

public void setBrand(String brand) {
System.out.println("set方法调用");
this.brand = brand;
}

public void init() {
System.out.println("init方法");
}

public void destory() {
System.out.println("destory方法");
}


@Override
public String toString() {
return "Car [brand=" + brand + "]";
}


}


2.后置处理器类

package com.hxzy.cycle;


import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;


public class MyBeanPostProcess implements BeanPostProcessor {



//在init-method方法之后被调用
// bean: bean 实例本身
// beanName: IOC容器配置的bean的名字
// 返回值:是实际上返回给用户的那个bean,可以在重新的方法中修改返回值。
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {

System.out.println("在初始化方法之后 后置处理器  : " + bean + ", " + beanName);

//偷梁换柱,添加此处代码后,输出中直接将朗逸换为途观
Car car = new Car();
car.setBrand("途观");
return car;
// return bean;
}


//在init-method方法之前被调用
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("在初始化方法之前 后置处理器  : "+ bean + ", "  + beanName);

if ("car".equals(beanName)) {
System.out.println("啥也不做");
}
return bean;
}



}


3.bean配置类

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="car" class="com.hxzy.cycle.Car"
        init-method="init" 
        destroy-method="destory">

        <property name="brand" value="朗逸"> </property>
            
    </bean>
    
    <!-- 配置bean的后置处理器 -->
    <bean class="com.hxzy.cycle.MyBeanPostProcess"></bean>


</beans>


4.测试类

package com.hxzy.cycle;


import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestBeanCycle {


public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("cycle.xml");
Car car = (Car) ctx.getBean("car");
System.out.println(car);
ctx.close();

}
}


运行效果

信息: Loading XML bean definitions from class path resource [cycle.xml]
构造器运行
set方法调用
在初始化方法之前 后置处理器  : Car [brand=朗逸], car
啥也不做
init方法
在初始化方法之后 后置处理器  : Car [brand=朗逸], car
构造器运行
set方法调用
Car [brand=途观]
十月 08, 2015 3:36:05 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@117ae12: startup date [Thu Oct 08 15:36:05 CST 2015]; root of context hierarchy
destory方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值