bean容器的启动阶段:
读取bean的配置,将bean元素分别转换成一个
BeanDefinition对象。
然后通过BeanDefinitionRegistry将这些bean注册到
beanFactory中,保存在它的一个ConcurrentHashMap中。
将BeanDefinition注册到了beanFactory之后,在这里
Spring为我们提供了一个扩展的切口,允许我们通过实现接口
BeanFactoryPostProcessor在此处来插入我们定义的代码。
典型的例子就是:PropertyPlaceholderConfigurer,我们一般在配置
数据库的dataSource时使用到的占位符的值,就是它注入进去的。
容器中bean的实例化阶段:
实例化阶段主要是通过反射或者CGLIB对bean进行实例化,在这个阶
段Spring又给我们暴露了很多的扩展点:
各种的Aware接口,比如BeanFactoryAware,对于实现了
这些Aware接口的bean,在实例化bean时Spring会帮我们注入对
应的BeanFactory的实例。
BeanPostProcessor接口,实现了BeanPostProcessor接口
的bean,在实例化bean时Spring会帮我们调用接口中的方法。
InitializingBean接口,实现了InitializingBean接口的
bean,在实例化bean时Spring会帮我们调用接口中的方法。
DisposableBean接口,实现了BeanPostProcessor接口的
bean,在该bean死亡时Spring会帮我们调用接口中的方法。
设计意义:
松耦合。可以将原来硬编码的依赖,通过Spring这个beanFactory这个
工厂来注入依赖,也就是说原来只有依赖方和被依赖方,现在我们引入
了第三方——spring这个beanFactory,由它来解决bean之间的依赖
问题,达到了松耦合的效果.
评论0
最新资源