1、spring生命周期的示意图
2、实例
2.1 创建 Car.class类
package spring.annotation.day1.ioc.bean; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; /** * @author : cuantianhou 2020/3/4 */ public class Car implements InitializingBean,DisposableBean { public Car(){ System.out.println("car constructor"); } public void init(){ System.out.println("car init"); } public void destroyCopy(){ System.out.println("car destroy"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("afterPropertiesSet"); } @Override public void destroy() throws Exception { System.out.println("interface car destroy"); } @PostConstruct public void postConstruct(){ System.out.println("car postConstruct"); } @PreDestroy public void preDestroy(){ System.out.println("car preDestroy"); } }
2.2 创建BeanPostProcessor实现类
package spring.annotation.day1.ioc.lifecycle; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; /** * @author : cuantianhou 2020/3/4 */ public class MyBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessAfterInitialization"); return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("postProcessBeforeInitialization"); return bean; } }
2.3 创建配置类
package spring.annotation.day1.ioc.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import spring.annotation.day1.ioc.bean.Car; import spring.annotation.day1.ioc.lifecycle.MyBeanPostProcessor; /** * @author : cuantianhou 2020/3/4 */ @Configuration public class LifeCycleConfig { @Bean(initMethod = "init",destroyMethod = "destroyCopy") public Car car(){ return new Car(); } @Bean public MyBeanPostProcessor myBeanPostProcessor(){ return new MyBeanPostProcessor(); } }
2.4 创建测试类
package spring.annotation.day1.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import spring.annotation.day1.ioc.config.LifeCycleConfig; /** * @author : cuantianhou 2020/3/4 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = LifeCycleConfig.class) public class LifeCyceConfigTest { /** * bean生命周期:bean创建+(属性赋值)初始化+销毁 */ @Test public void lifeCycleConfigTest(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(LifeCycleConfig.class); System.out.println("container create finish"); applicationContext.close(); } }
2.5 测试结果