请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在MyAwareProcessor中的构造方法中,为什么context能注入进来?原理是什么?

老师你好,为什么在MyAwareProcessor中的构造方法中,能把context注入进来,这块原理不太懂,能否讲解下

正在回答 回答被采纳积分+3

1回答

源码师 2020-04-05 00:09:24

小伙伴你好,因为spring框架在初始化processor时候会传入context调用指定的构造方法。

1 回复 有任何疑惑可以回复我~
  • jaymie #1
    老师 这里我说下我的理解,这里 MyAwareProcess 在实例化的时候 使用了 autowireConstructor,走到这个方法需要两个条件
    resolved = true 并且 autowireNecessary = true
    
    
    if (resolved) {
    			if (autowireNecessary) {
    				return autowireConstructor(beanName, mbd, null, null);
    			}
    
    
    这两个条件都在 这个判断里
    mbd.resolvedConstructorOrFactoryMethod != null
    
    如果这个bean定义中 构造函数或者工厂方法不为空,那么 resolved 为 true
    constructorArgumentsResolved 也为true
    
    所以走了构造方法实例化并且把 ConfigurableApplicationContext 的实例注入到了  MyAwareProcessor 对象的属性  configurableApplicationContext 中? 因为 ConfigurableApplicationContext的对象在容器里也是一个bean?
    回复 有任何疑惑可以回复我~ 2020-08-27 22:10:21
  • 源码师 回复 jaymie #2
    小伙伴理解的很好,也可以通过自己debug加强认知。
    回复 有任何疑惑可以回复我~ 2020-08-27 22:55:29
  • Panda_io 回复 jaymie #3
    其实是Constructor<?>[] ctors = determineConstruc torsFromBeanPos tProcessors (beanClass, beanName) ;这一行代码返回不为空,走的是有参的构造函数,然后解析出构造参数依赖,再从BeanFactory中获取,你可以试一试当一个类中只有一个构造函数时,且该构造函数有参,不需要添加@Autowire也可以通过依赖注入从容器中获取对应类型的参数值。
    回复 有任何疑惑可以回复我~ 2022-03-30 21:15:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信