通過@Autowired註入的類所在的包路徑不在Application啟動類所在的包/子包路徑下。
Spring Boot項目的Bean裝配 默認規則 是根據Application類(指項目入口類)所在的包位置從上往下掃描。
eg: Application啟動類 在包com.alibaba.taobao下,則只會掃描 com.alibaba.taobao 包及其所有子包,如果需要自動裝載的類所在包不在 com.alibaba.taobao 及其子包下,而是在 com.alibaba.tmall 下,則不會被掃描,自然就沒法被註入!
若類A中包含成員屬性B, B是通過@Autowired自動註入,而類 A的實例 是通過 new的方式 產生,則自動註入會失效的。
在啟動類中定義分別掃描兩個包 ,即在@SpringBootApplication註解的類中添加:
@ComponentScan({"com.alibaba.taobao","com.alibaba.tmall"})
或
@ComponentScan({"com.alibaba"})
定義壹個SpringUtil類
然後在類A中通過如下調用獲取Spring容器中的B實例
ClassBInterface b = (ClassBInterfaceImpl) SpringUtil.getBean("classBInterfaceImpl");