spring bean 生命周期事件
整体流程图
程序示例
maven依赖
<dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.12.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency></dependencies>
配置类
@Configuration@ComponentScan("per.ym.processor, per.ym.service")public class LifeCycleConfig { @Bean(initMethod = "init", destroyMethod = "destroy") public LifeCycleBean lifeCycleBean() { return new LifeCycleBean(); }}
实例bean
public class LifeCycleBean implements InitializingBean, BeanNameAware, BeanFactoryAware, BeanClassLoaderAware { public LifeCycleBean() { System.out.println("consturctor......"); } public void init() { System.out.println("init......"); } @Autowired public void setService(PersonService service) { System.out.println("setService......"); } public void destroy() { System.out.println("destroy......"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("afterPropertiesSet......"); } @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { System.out.println("setBeanFactory......"); } @Override public void setBeanName(String name) { System.out.println("setBeanName......"); } @Override public void setBeanClassLoader(ClassLoader classLoader) { System.out.println("setBeanClassLoader......"); }}
InstantiationAwareBeanPostProcessor
package per.ym.processor;@Componentpublic class MyInstantiationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter { @Override public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")) { System.out.println("postProcessBeforeInstantiation......"); } return null; } @Override public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")) { System.out.println("postProcessAfterInstantiation......"); } return true; } @Override public PropertyValues postProcessPropertyValues( PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")) { System.out.println("postProcessPropertyValues......"); } return pvs; }}
BeanPostProcessor
package per.ym.processor;@Componentpublic class MyPostProcess implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")) { System.out.println("postProcessBeforeInitialization......"); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (beanName.equals("lifeCycleBean")) { System.out.println("postProcessAfterInitialization......"); } return bean; }}
service
package per.ym.service;@Servicepublic class Service {}
测试类
public class Test_Normal {AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(LifeCycleConfig.class); @Test public void test() { applicationContext.getBean("lifeCycleBean"); applicationContext.close(); }}
测试结果:
postProcessBeforeInstantiation......consturctor......postProcessAfterInstantiation......postProcessPropertyValues......setService......setBeanName......setBeanClassLoader......setBeanFactory......postProcessBeforeInitialization......afterPropertiesSet......init......postProcessAfterInitialization......destroy......
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。