Spring生命周期流程整理,回调接口集合和核心类,后置处理器类

博客围绕Spring和Java在后端开发中的应用展开,虽未给出具体内容,但可知聚焦于后端技术领域,利用Spring框架和Java语言进行开发。
class All{
    // ContextAnnotationAutowireCandidateResolver: 用于解析@Value,@Lazy...注解的Bean
    // ConfigurationClassPostProcessor: 解析所有Bean相关注解配置信息
    // AutowiredAnnotationBeanPostProcessor: 解析@Autowired自动注入
    // CommonAnnotationBeanPostProcessor: 处理@Resource,@PostConstruct注解的类
    // PersistenceAnnotationBeanPostProcessor: 处理JPA中两个注解PersistenceContext和PersistenceUnit的处理器
    // EventListenerMethodProcessor: 用于处理@EventListener注解
    // DefaultEventListenerFactory: 用于处理@EventListener->ApplicationListener接口的类
    // ClassPathBeanDefinitionScanner: 扫描类路径下的扫描器->BeanDefinition的过程类


    // Aware接口
    // Environment: 用于整个Spring环境相关的接口,属性...
    // EnvironmentAware: 用于需要Environment参数的回调
    // EmbeddedValueResolver: 用于需要使用占位符解析器
    // EmbeddedValueResolverAware: 用于需要使用占位符解析器的回调
    // ResourceLoader: 用于处理Resource资源相关Loader,ApplicationContext是该类型
    // ResourceLoaderAware: 用于处理Resource资源相关Loader的回调
    // ApplicationEventPublisher用于发布事件的对象,ApplicationContext是该类型
    // ApplicationEventPublisherAware: 用于发布事件的对象的回调
    // MessageSource: 用于国际化消息处理,ApplicationContext是该类型
    // MessageSourceAware: 用于国际化消息处理的对象回调
    // ApplicationContext: Spring容器上下文
    // ApplicationContextAware: 获取Spring容器上下文的回调
    // BeanNameAware: 获取某个bean的BeanName回调,因为有些BeanName是自动生成的
    // BeanClassLoaderAware: 获取Bean的类加载器的回调
    // BeanFactory: 创建Bean的工厂接口
    // BeanFactoryAware: 获取Bean工厂的接口回调



    // Environment.systemProperties: 所有系统变量的集合,会自动注册为Bean
    // Environment.systemEnvironment: 所有系统环境变量的集合,会自动注册为Bean

    // ApplicationEventMulticaster: 事件分发器接口
    // ApplicationListener: 事件监听器接口
    // ConversionService: 类型转换服务接口
    // FactoryBean: 本身是一个@Bean,而且是一个可以提供高度定制的Bean的工厂
    // SmartFactoryBean: 是一个FactoryBean,提供了判断返回的bean是否是原型的,并且还可以设置该Bean是否立即初始化
    // LifecycleProcessor: 通过实现Lifecycle接口的bean可以在Spring容器启动时自动初始化
    //                     而LifecycleProcessor负责调用这些bean的start()方法来启动它们
    //                     当 Spring容器关闭时,LifecycleProcessor会调用这些bean的stop()方法来停止它们
    //                     以确保在Spring容器销毁时,生命周期bean能够正确地执行清理操作
    //                     其中,AbstractApplicationContext就是Lifecycle的实现,会在start方法中publishEvent(new ContextStartedEvent(this));
    //                     在stop方法中publishEvent(new ContextStoppedEvent(this));

    // InitializingBean: 对象初始化之后的回调方法
    // DisposableBean: 对象销毁之前的回调方法

    // Scope: 自定义作用域的接口



    // Bean相关的后置处理器
    // BeanDefinitionRegistry: 用于注册BeanDefinition的接口
    // BeanFactoryPostProcessor: 用于修改BeanFactory中的BeanDefinition
    // BeanDefinitionRegistryPostProcessor: 它也是一个BeanFactoryPostProcessor
    //                                      它还可以手动注册BeanDefinition
    // BeanPostProcessor: Bean的后置处理器,可以用于控制对象初始化的前后操作,此时对象已经实例化
    // MergedBeanDefinitionPostProcessor: 它也是一个BeanPostProcessor
    //                                    它还可以修改合并之后BeanDefinition的信息,在BD合并之后可以进行的操作
    //                                    一般是系统内部使用,我们不使用
    // InstantiationAwareBeanPostProcessor: 控制实例化的后置处理器,他也是一个BeanPostProcessor
    //                                      它还可以控制对象实例化前后的逻辑,并且还可以操作处理bean的属性
    // DestructionAwareBeanPostProcessor: 它也是一个BeanPostProcessor,控制Bean销毁之前处理的逻辑
    // SmartInitializingSingleton: 所有的单例Bean都初始化完成之后进行的回调,例如@EventListener和@Schedule就是这样处理的
    // SmartInstantiationAwareBeanPostProcessor: 他是一个InstantiationAwareBeanPostProcessor,它可以确定Bean的类型
    //                                           还可以推断构造方法,确定哪些构造方法可用,还可以获取代理对象


    // 一些后置处理器的执行顺序和bean的bean的生命周期整理
    // 1. 容器刷新
    // 2. 执行实现了BeanDefinitionRegistryPostProcessor接口的postProcessBeanDefinitionRegistry回调,执行用户手动添加的BeanDefinition
    // 3. 执行实现了BeanFactoryPostProcessor接口的postProcessBeanFactory回调
    // 4. 执行实现了InstantiationAwareBeanPostProcessor接口的postProcessBeforeInstantiation回调,bean实例化前需要做的事
    // 5. 执行实现了SmartInstantiationAwareBeanPostProcessor接口的determineCandidateConstructors方法,确定构造方法
    // 6. 对象实例化
    // 7. 执行实现了MergedBeanDefinitionPostProcessor接口的postProcessMergedBeanDefinition方法,系统内部使用
    // 8. 执行实现了SmartInstantiationAwareBeanPostProcessor接口的getEarlyBeanReference方法,是否需要提前创建代理对象
    // 9. 执行实现了InstantiationAwareBeanPostProcessor接口的postProcessAfterInstantiation方法,实例化之后需要做的事
    // 10. 执行实现了InstantiationAwareBeanPostProcessor接口的postProcessProperties方法,属性注入需要处理的事情
    // 11. 执行Aware方法接口,invokeAwareMethods:BeanNameAware,BeanClassLoaderAware,BeanFactoryAware,将对应的参数给需要的回调接口
    // 12. 执行实现了BeanPostProcessor接口的postProcessBeforeInitialization方法,初始化之前执行的事情
    // 12.1. ApplicationContextAwareProcessor处理invokeAwareInterfaces,ApplicationContextAware,EnvironmentAware,EmbeddedValueResolverAware
    //                                                                MessageSourceAware,ApplicationEventPublisherAware,ResourceLoaderAware
    //                                                                    将对应的参数给需要的回调接口
    // 12.2. 执行@PostConstruct标注的方法
    // 13. 执行实现了InitializingBean的afterPropertiesSet的回调,接着执行自定义的init-method
    // 14. 执行实现了BeanPostProcessor接口的postProcessAfterInitialization方法
    // 14.1. 正常情况下的代理对象就是在这里创建的AbstractAutoProxyCreator
    // 15. 容器关闭,销毁Bean
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值