ApplicationContext的refresh()方法-01

因为现在更倾向于基于注解开发,因此重心放在AnnotationConfigApplicationContext上。

我们将断点,打在第一行,即上方红色箭头所指向的方向,此时我们发现BeanDefinitionMap中已经存放有6个BeanDefinition了,其中有一个很容易理解,是我们的AppConfig,那么剩下的五个BD是什么呢,同时他们又是什么时候注册的,应该是AnnotatedBeanDefinitionReader的构造方法创建的

 我们接着分析。

AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor都是BeanPostProcessor的接口,显然是在对象实例化之后对Bean进行一些处理。

其中的AutowiredAnnotationBeanPostProcessor我们前文中有提及,是处理有关@Autowired注解的和@Value注解的。

CommonAnnotationBeanPostProcessor处理@Resource、@PostConstruct(init-method)、@PreDestory(destroy-method)

ConfigurationClassPostProcessor是BeanFactoryPostProcessor的接口实现,处理 @Configuration(@Bean)、@ComponentScan(包路径扫描)、@Import(注册普通类、importSelect、importBeanDefinitionRegister)、@ImportResource(引用配置文件,即ApplicationContext.xml,标签和注解作整合)、@PropertySource(用于@Value的JDK类型注入)

可以理解为,BeanPostProcessor处理的是对象的加工,FactoryBeanPostProcessor处理的是BeanDefinition的加工

而DefaultEventListenerFactory和EventListenerMethodProcessor是与事件相关的,Spring应用不太多。

注意我们此时处理的是有关注解的ApplicationContext的,而不是基于xml文件的,xml文件是不会有上述的类型的,一种角度想,AnnotationConfigApplicationContext是ClassPathXmlApplicationContext的升级版,Spring厉害的点在于,没有改动ClassPathXmlApplicationContext,仅仅依靠postProcessor就实现了对注解的支持,完全符合开闭原则。

 从源码中也可以看见,就是做了处理标志位,设置启动时间,并且标记处于活跃状态,不重要。

下边一行获取核心工厂 DefaultListableBeanFactory。

prepareBeanFactroy代码带注释如下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值