spring 实现ApplicationContextAware 具体过程是怎么执行的
我们在spring 环境外 获取spring的上下文 可以实现 ApplicationContextAware
但我不明白的是 我实现了这个接口 spring怎么知道我实现了?
当spring在启动的时候 是通过 java的反射机制 获取到ApplicationContextAware 的实现类 在在执行接口的所有方法吗 ? 具体怎么运行的 麻烦大神指点一下
搜索
复制
如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

评论(9)

1.你必须把这个 class 给了 spring 托管(无论你是打了@注解,然后配了扫描范围,或者是直接在 xml 中配了)
2.既然这个 class 你托管给了 spring ,spring 知道了它的存在,spring 在启动的时候就需要实例化这个 class(如果是懒加载就是你需要用到的时候实例化),在实例化这个 class 的时候,发现它包含这个 ApplicationContextAware 接口的话,sping 就会调用这个对象的 setApplicationContext 方法,把 applicationContext Set 进去了。


可以参考一个spring的源代码。在spring的3.2.1中不是通过反射设置,而是直接调用了set方法
1、类AbstractApplicationContext中的prepareBeanFactory这个方法中向beanFactory注册了一个beanPostProcessor。
beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
2、ApplicationContextAwareProcessor中参考方法invokeAwareInterfaces
if (bean instanceof ApplicationContextAware) {
((ApplicationContextAware) bean).setApplicationContext(this.applicationContext);
}
发布评论
需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。