spring bean生命周期事件

  

<强>整体流程图

  

 spring bean生命周期事件

  

<强>程序示例

  

maven依赖   

 <代码> & lt; dependencies>
  & lt; !——https://mvnrepository.com/artifact/org.springframework/spring-context——比;
  & lt; dependency>
  & lt; groupId> org.springframework
  & lt; artifactId> spring-context
  & lt; version> 4.3.12.RELEASE
  & lt;/dependency>
  
  & lt; dependency>
  & lt; groupId> junit
  & lt; artifactId> junit
  & lt; version> 4.12 & lt;/version>
  & lt; scope> test
  & lt;/dependency>
  
  & lt;/dependencies>  
  

配置类   

 <代码> @ configuration
  @ComponentScan (“per.ym。处理器,per.ym.service”)
  公开课LifeCycleConfig {
  
  @ bean (initMethod=癷nit”, destroyMethod=按莼佟?
  公共LifeCycleBean LifeCycleBean () {
  返回新LifeCycleBean ();
  }
  } 
  

实例bean   

 <代码>公共类LifeCycleBean实现InitializingBean BeanNameAware, BeanFactoryAware BeanClassLoaderAware {
  
  公共LifeCycleBean () {
  System.out.println (“consturctor……”);
  }
  
  公共空间init () {
  System.out.println (“init……”);
  }
  
  @ autowired
  公共空间setService (PersonService服务){
  System.out.println (“setService……”);
  }
  
  公共空间摧毁(){
  System.out.println(“摧毁……”);
  }
  
  @Override
  公共空间afterPropertiesSet()抛出异常{
  System.out.println (“afterPropertiesSet……”);
  }
  
  @Override
  公共空间setBeanFactory (BeanFactory BeanFactory)抛出BeansException {
  System.out.println (“setBeanFactory……”);
  }
  
  @Override
  公共空间setBeanName(字符串名称){
  System.out.println (“setBeanName……”);
  }
  
  @Override
  公共空间setBeanClassLoader(类加载器类加载器){
  System.out.println (“setBeanClassLoader……”);
  }
  
  } 
  

InstantiationAwareBeanPostProcessor   

 <代码>包per.ym.processor;
  
  @ component
  公开课MyInstantiationBeanPostProcessor延伸InstantiationAwareBeanPostProcessorAdapter {
  
  @Override
  公共对象postProcessBeforeInstantiation (Class<?比;beanClass,字符串beanName)抛出BeansException {
  如果(beanName.equals (“lifeCycleBean”)) {
  System.out.println (“postProcessBeforeInstantiation……”);
  }
  返回null;
  }
  
  @Override
  公共布尔postProcessAfterInstantiation(对象bean,字符串beanName)抛出BeansException {
  如果(beanName.equals (“lifeCycleBean”)) {
  System.out.println (“postProcessAfterInstantiation……”);
  }
  返回true;
  }
  
  @Override
  公共propertyvalue postProcessPropertyValues (
  propertyvalue pv, PropertyDescriptor [] pds,对象bean,字符串beanName)抛出BeansException {
  如果(beanName.equals (“lifeCycleBean”)) {
  System.out.println (“postProcessPropertyValues……”);
  }
  返回pv;
  }
  
  } 
  

BeanPostProcessor   

 <代码>包per.ym.processor;
  
  @ component
  公共类MyPostProcess实现BeanPostProcessor {
  
  @Override
  公共对象postProcessBeforeInitialization(对象bean,字符串beanName)抛出BeansException {
  如果(beanName.equals (“lifeCycleBean”)) {
  System.out.println (“postProcessBeforeInitialization……”);
  }
  返回bean;
  }
  
  @Override
  公共对象postProcessAfterInitialization(对象bean,字符串beanName)抛出BeansException {
  如果(beanName.equals (“lifeCycleBean”)) {
  System.out.println (“postProcessAfterInitialization……”);
  }
  返回bean;
  }
  
  } 
  

服务   
 <代码>包per.ym.service;
  
  @ service
  公共类服务{
  } 
  

测试类   

 <代码>公共类Test_Normal {
  
  所applicationContext=new所(LifeCycleConfig.class);
  
  @Test
  公共空白测试(){
  applicationContext.getBean (“lifeCycleBean”);
  applicationContext.close ();
  }
  } 
  

测试结果:

  
 <代码> postProcessBeforeInstantiation……
  consturctor……
  postProcessAfterInstantiation……
  postProcessPropertyValues……
  setService……
  setBeanName……
  setBeanClassLoader……
  setBeanFactory……
  postProcessBeforeInitialization……
  afterPropertiesSet……
  初始化……
  postProcessAfterInitialization……
  摧毁…

spring bean生命周期事件