<强>整体流程图强>
<强>程序示例强>
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生命周期事件