@Autowired到底是在什么时候注入的?

@Autowired到底是在什么时候注入的?

这是我在shiro配置的时候发现的问题。

在我的项目中我有个shiro配置类
shiroRealm是以内部类得方式写在配置类里面的,然后这个realm里面依赖注入了一个service。
clipboard.png

然后我在这个配置类下面,将这个shirorelam以@Bean的方式加入到容器中。

clipboard.png

然后我在运行的时候打了个断点,发现此时realm中的service是空,说明加入到容器中的realm的成员变量realm是空,service没有注入进去。

clipboard.png

但是我项目跑起来后,认证的时候发现service又有了,这是怎么回事,@Autowired到底是在什么时候注入的?求大神解答。

clipboard.png

阅读 9.2k
4 个回答

容器启动后spring加载类的时候注入的

构造函数调用 先于 字段注入,所以你断点打在构造函数中间的时候自然是还没有注入的

@Autowired 注解的注入是通过类 AutowiredAnnotationBeanPostProcessor 实现的,是在 bean 实例化后处理的动作,你打断点的那个地方 shiroRealm 还是你自己构造出来的,还没有交给 spring 容器管理

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题