采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师你好,为什么在MyAwareProcessor中的构造方法中,能把context注入进来,这块原理不太懂,能否讲解下
小伙伴你好,因为spring框架在初始化processor时候会传入context调用指定的构造方法。
老师 这里我说下我的理解,这里 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?
小伙伴理解的很好,也可以通过自己debug加强认知。
其实是Constructor<?>[] ctors = determineConstruc torsFromBeanPos tProcessors (beanClass, beanName) ;这一行代码返回不为空,走的是有参的构造函数,然后解析出构造参数依赖,再从BeanFactory中获取,你可以试一试当一个类中只有一个构造函数时,且该构造函数有参,不需要添加@Autowire也可以通过依赖注入从容器中获取对应类型的参数值。
登录后可查看更多问答,登录/注册
程学懂SpringBoot源码,附带SpringBoot面试100问资料
834 5
892 5
783 5
932 4
1.0k 4