整体流程图

程序示例

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......