springframework中IOC容器源码详解

ApplicationContext

Spring IoC容器 
<https://www.cnblogs.com/zhangfengxian/p/11086695.html#spring-ioc容器> 
 

ApplicationContext

springboot中容器对象是ApplcationContext

获取ApplicationContext的三种方式

1 test测试时,自动注入(注入失败,暂时解决)

2 编写implements ApplicationContextAware接口实现类(主要方法是setApplicationContext(xx)),然后自动注入该实现类即可

注意,静态变量是不能被spring 容器所管理的

ApplicationContext可以获取容器管理对象

扫描二维码关注公众号,回复: 10051924 查看本文章

ApplicationContext.getBeanDefinitionNames();

InitializingBean接口

InitializingBean接口为实例化bean提供了初始化方法,它只有一个方法afterPropertiesSet,凡是继承该接口的类,都会在实例化该类bean的时候调用该方法,即bean的所有属性都被注入后才会调用此方法,此方法适用于那些属性无法自动注入或者需要特殊设置的类bean.

BeanDefinitionRegistryPostProcessor

BeanDefinitionRegistryPostProcessor接口可以支持听过代码实现动态注册bean到springIOC容器中,spring容器在初始化bean的时候,是通过资源读取相关bean的配置,然后保存到BeanDefinitionMap中,然后通过这些定义实例化bean,而在实例化之前,spring允许我们自定义扩展来改变bean的定义,定义一旦变了,后面的实例也会产生变化,而beanFactory的后置处理器BeanDefinitionPostProcessor就是用来改变bean的定义的。

而BeanDefinitionRegistryPostProcessor继承了BeanFactoryPostPorpcessor,

在AbstractApplicationContext的refresh中的invokeBeanFactoryPostProcessor来找到所有的BeanFactoryPostProcessor,并调用这些处理器来改变bean的定义。BeanFactoryPostProcessor通过其postProcessBeanFactory来改变bean的定义,而BeanDefinitionRegistryPostProcessor有两个需要实现的接口:

void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException:
该方法的实现中,主要用来对bean定义做一些改变。

void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException:
该方法用来注册更多的bean到spring容器中,详细观察入参BeanDefinitionRegistry接口,看看这个参数能带给我们什么能力。

Environment

ConfigurableEnvironment的实现类包括AbstractEnvironment,ConfigurableReactiveWebEnvironment等等子类

在开发中我们可以通过编写implements EnvironmentAware来获取Environment对象

EnvironmentAware

通过实现该接口,setEnvironment 可以获取Environment对象,其中重写的方法setEnvironment方法会在系统工程启动的时候会被调用,@Service,@Component,@Controller等被spring管理的类都可以实现该接口


 

发布了18 篇原创文章 · 获赞 0 · 访问量 458

猜你喜欢

转载自blog.csdn.net/qq_36236038/article/details/104363952
今日推荐