项目场景:
提示:这里简述项目相关背景:
在一次需求实现中,需要在一个service中注入另一个service
问题描述:
例如:我们可以看到,在图片的右边后几个绿色的圆圈,这是idea自带的检测,出现这个就表明bean已经被扫描到了。既然已经被扫描到了,为什么还是不能注入呢?。我还试了在controller中注入,在其他service中注入,发现都没有问题。偏偏只有这一个service注入失败,人都给整懵了。
解决方案:
有问题找度娘呗,发现一个注解:@PostConstruct,修改代码为下图:
作用:
@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。
执行顺序:
其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。
如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么就无法在构造函数中实现。为此,可以使用@PostConstruct注解一个方法来完成初始化,@PostConstruct注解的方法将会在依赖注入完成后被自动调用。
Constructor >> @Autowired >> @PostConstruct