整体流程图
程序示例
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;
- @Component
- public 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;
- @Component
- public 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;
- @Service
- public 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......
来源: http://www.bubuko.com/infodetail-3075116.html