spring 复习
https://www.bilibili.com/video/BV1za41177PR

1.springboot创建tomcat server
是在onrefresh方法里面写的,spring中默认是空的,留给子类扩展的。
2.beanFactory是访问spring容器的根接口,我们平时使用applicationContext就是它的实现。
3.常用的增强点,后置处理器postProcessor,BeanFactoryPostProcessor和BeanPostProcessor
BeanFactoryPostProcessor在bean实例化之前执行,之后实例化bean(调用构造函数,并调用set方法注入属性值),然后在调用两个初始化方法前后,执行了BeanPostProcessor。初始化方法的执行顺序是,先执行afterPropertiesSet,再执行init-method。
(28条消息) Spring的BeanFactoryPostProcessor和BeanPostProcessor_江南好风景的博客-CSDN博客_postprocessor
4.<bean>标签里面的propeties value,比如jdbc-url之类的,是怎么设置进去的?

使用beanFactoryPostProcessor,有一个placehoderConfigurerSupport可以专门做这个事情

5.以上是xml的流程中使用的,如果是注解的形式,那么也有对应的实现类。

使用ConfigurationClassPostProcessor进行扩展。可以对带有@Conpoment,@Import,@Bean等的类进行处理。
6.bean的生命周期
1.实例化,createBeanInstance(反射)
2.初始化
2.1设置属性,populateBean(调用set方法赋值),实际就是设置自定义属性
2.2检查Aware,进行设置。invokeAwareMethods,实际就是设置容器对象属性

Aware的作用,是提供一些容器内的对象,给我们的bean来用,比如xxx对象,需要使用beanFactory做事情的时候,可以implements beanFactoryAware,那么就有这个属性可以用了
下面判断是否需要扩展
2.3 执行前置扩展 beanPostProcessor,beanPostProcessorBeforeInitialization
2.4调用初始化方法 invokeInitMethod->判断当前的bean是否实现了InilationBean,实现了的话调用afterPropertiesSet
2.5执行后置扩展 beanPostProcessor,beanPostProcessorAfterInitialization,代理对象的创建
比如说aop创建代理对象,就是在后置处理中创建的。要么是cglib要么是jdk
2.6交给容器管理 addSingleton,放入一级缓存,删除二级缓存之类的
2.7对象使用
2.8对象销毁
7.BeanFactory和FactoryBean,都可以创建对象,BeanFactory是需要有标准流程,符合生命周期。FactoryBean是一个简易的方法,有三年方法,isSingleton,getObejectType,getObejct
8.循环依赖,三级缓存,一级成品(实例化+初始化),二级半成品(实例化)
正常的代理对象的处理,需要在bpp的后置处理生成,但是如果循环依赖了,就需要三级缓存,用一个lambda表达式来前置了这个代理对象的生成。
下面是另一篇文章:
(48条消息) Spring的Bean生命周期和扩展点_txxs的博客-CSDN博客
看这个图也行。
分为专用的和通用的扩展点,aware是专用的,beanPostProccesor是通用的

扩展点的具体使用:
比如,awrae接口,就可以在属性填充之后,初始化之前,获取对应的信息,比如beanNameAware可以获取名称,beanFactoryAware,可以获取beanFactory,environmentAware可以获取环境配置等。
还有beanPostProcessor,这个在实例化前后,初始化前后都可以扩展,比较常见的,比如AutowiredAnnotationBeanPostProcessor,在实例化之后,就可以处理相应的@Autowired、@Value注解,完成一些属性的注入。一些常见的接口如下:
AutowiredAnnotationBeanPostProcessor处理@Autowired、@Value注解CommonAnnotationBeanPostProcessor处理@Resource、@PostConstruct、@PreDestroy注解AnnotationAwareAspectJAutoProxyCreator处理一些注解或者是AOP切面的动态代理ApplicationContextAwareProcessor处理Aware接口注入的AsyncAnnotationBeanPostProcessor处理@Async注解ScheduledAnnotationBeanPostProcessor处理@Scheduled注解
@PostConstruct,会在依赖注入完成之后执行,方法不能有参数而且只能有一个