zoukankan      html  css  js  c++  java
  • BeanLiftCycle(1)

    Bean生命周期图:

    1、 创建BeanFactory(DefaultListableBeanFactory)

    2、 手动注册BeanDefinition(ImportBeanDefinitionRegistrar.registerBeanDefinitions)

    3、 BeanFactory后置处理(BeanFactoryPostProcessor.postProcessBeanFactory)

    4、 调用Bean.class的构造器实例化Bean

    5、 Bean初始化之前处理(BeanPostProcessor.postProcessBeforeInitialization)

    6、 Bean构造器后置处理(PostConstruct)

    7、 设置属性(InitializingBean .afterPropertiesSet)

    8、 执行InitMethod

    9、 Bean初始化结束之后处理(BeanPostProcessor.postProcessAfterInitialization)

    10、Bean摧毁之前处理(PreDestroy)

    11、Bean摧毁

    启动类:

    public class Start {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);
            applicationContext.close();
        }
    }

    配置类:

    @Configurable
    @ComponentScan({ "com.spring.demo.beanlifecycle" })
    @Import(ImportBeanDefinitionRegistrar_.class)
    public class Config {
    }

    Bean:

    public class Bean implements InitializingBean {
        public Bean() {
            System.out.println("invoke Construct: " + this);
        }
        public void init() {
            System.out.println("init: " + this);
        }
        public void destroy() {
            System.out.println("destroy: " + this);
        }
        @PostConstruct
        public void postConstruct() {
            System.out.println("PostConstruct: " + this);
        }
        @PreDestroy
        public void preDestroy(){
            System.out.println("PreDestroy: " + this);
        }
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("afterPropertiesSet: " + this);
        }
    }
    

      

    registerBeanDefinitions:

    public class ImportBeanDefinitionRegistrar_ implements ImportBeanDefinitionRegistrar {
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            BeanDefinition beanDefinition =
                BeanDefinitionBuilder.rootBeanDefinition(Bean.class).setInitMethodName("init").setDestroyMethodName("destroy").getBeanDefinition();
            registry.registerBeanDefinition("bean", beanDefinition);
            System.out.println("registerBeanDefinitions: " + beanDefinition);
        }
    }
    

      

    BeanFactoryPostProcessor:

    @Component
    public class BeanFactoryPostProcessor_ implements BeanFactoryPostProcessor {
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
            System.out.println("postProcessBeanFactory :" + beanFactory.getBeanDefinition("bean"));
        }
    }
    

      

    BeanPostPrcesser

    @Component
    public class BeanPostProcessor_ implements BeanPostProcessor {
        @Override
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            if (bean.getClass().equals(Bean.class)) {
                System.out.println("postProcessBeforeInitialization : " + bean.toString());
            }
            return bean;
        }
        @Override
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            if (bean.getClass().equals(Bean.class)) {
                System.out.println("postProcessAfterInitialization : " + bean.toString());
            }
            return bean;
        }
    }

    执行结果

    registerBeanDefinitions: Root bean: class [com.spring.demo.beanlifecycle.Bean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=init; destroyMethodName=destroy
    postProcessBeanFactory : Root bean: class [com.spring.demo.beanlifecycle.Bean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=init; destroyMethodName=destroy
    invoke Construct: com.spring.demo.beanlifecycle.Bean@74294adb
    postProcessBeforeInitialization : com.spring.demo.beanlifecycle.Bean@74294adb
    PostConstruct: com.spring.demo.beanlifecycle.Bean@74294adb
    afterPropertiesSet: com.spring.demo.beanlifecycle.Bean@74294adb
    init: com.spring.demo.beanlifecycle.Bean@74294adb
    postProcessAfterInitialization : com.spring.demo.beanlifecycle.Bean@74294adb
    PreDestroy: com.spring.demo.beanlifecycle.Bean@74294adb
    destroy: com.spring.demo.beanlifecycle.Bean@74294adb

    over

  • 相关阅读:
    BindingException: Parameter 'approval_state' not found. Available parameters are [arg1, arg0, param1, param2]]
    vue.js学习笔记(一)——vue-cli项目的目录结构
    memcpy函数
    与、或、异或运算
    C++中的dynamic_cast和dynamic_pointer_cast
    django中orm之什么是正向查询什么是反向查询
    jquery笔记
    jquery
    前端操作数组
    Auto Layout Guide----(三)-----Anatomy of a Constraint
  • 原文地址:https://www.cnblogs.com/sleepingDogs/p/11070852.html
Copyright © 2011-2022 走看看