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

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

在我的项目中我有个shiro配置类

shiroRealm是以内部类得方式写在配置类里面的,然后这个realm里面依赖注入了一个service。

c38a74affc14d479ee8a945d0a628c65.png

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

16e03ed19ea99dcc2387cee6891ba02f.png

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

fa959ecdb8f8551647845f3e3499c799.png

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

5ba42bba3fa1e15d29df2b672f610e8a.png

回答

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

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

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

看不看随你咯,我帮你找到了,反正我是没看完0-0

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐