- 当服务启动时SpringApplication.run会执行spring的刷新上下文操作
- 刷新方法里边会根据BeanDeflnitionNames,getBean没有就会利用反射机制 实例化bean
- 实例化完成会执行属性填充方法初始化bean
- 初始化完成就可以被使用,使用有对应的前置处理和后置处理
- 在容器销毁的时候对应销毁,如果bean使用了destroy-method属性声明了销毁方法则该方法被调用
- 图解spring IOC容器的核心实现原理 上图
- spring的扩展实现一:BeanFactoryPostProcessor接口详解 对BeanDefinition的一个扩展
- spring的扩展实现二:BeanPostProcessor接口详解 对Bean对象完成扩展
- 必知必会的13个Bean声明周期处理机制
-
- 实例化bean对象->初始化设置对象属性->检查Aweare相关接口并设置相关依赖-BeanPostProcessor前置处理->检查是否是InitializingBean以决定是否调用afterPropertiesSet方法->检查是否配置有自定义的init-method->BeanPostProcessor后置处理->注册必要的Destruction相关回调接口->使用中->是否实现DisposableBean接口->是否配置有自定义的destroy方法
- Spring Bean实现Aware接口的意义
- Aware是根接口没有任何方法 在原有的bean标准化流程扩展,可以解析注解 例如:@PostContruct、@PreDestroy、@Autowired、@Value
- Aware系列接口,主要用于辅助Spring bean访问Spring容器 Aware是“意识到的,察觉到的”的意思,实现了Aware系列接口表明:可以意识到、可以察觉到)
- BeanFactory和FactoryBean的接口对比
-
- 相同点:都是用来创建对象的
- 不同点:
- BeanFactory是Bean工厂,创建的时候是标准化流程
- FactoryBean是私人订制,实现接口重写其getObject方法,想怎么创建就怎么创建对象 (new、反射、动态代理)