難為一天多,終於解決,問題在於建造者模式下,引入另一個類時,此類中如下代碼
@Autowired
ITdRecruitService iTdRecruitService; //總是不成功,即獲取不到 iTdRecruitService
建造者模式是什么,見下文
https://www.cnblogs.com/adamjwh/p/9033551.html
而我使用在在這樣場景中被大連朋友告訴我是這個樣子

在如上RecruitPipline的類中,
通過@Autowired
@Autowired ITdRecruitService iTdRecruitService;
//以下會 返回空指值,
iTdRecruitService.xxxx方法時()
問題是注入不成功
問題本質:
解決了我的問題
進一步分析
之所以注入不成功
若類A中包含成員屬性B, B是通過@Autowired自動注入,而類A的實例是通過new的方式產生,則自動注入會失效的。
哈哈哈,我犯的是這個錯誤。解決方案文章如下
SpringBoot 之 普通類獲取Spring容器中的bean ,解決 @Autowired 注解,拿下到bean問題
本文來源網址: https://funyan.cn/p/2869.html
我們知道如果我們要在一個類使用
spring 提供的bean對象,我們需要把這個類注入到spring容器中,交給spring容器進行管理,但是在實際當中,我們往往會碰到在一個普通的
Java 類中,想直接使用spring提供的其他對象或者說有一些不需要交給spring管理,但是需要用到spring里的一些對象。如果這是spring框架的獨立應用程序,我們通過
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId");
這樣的方式就可以很輕易的獲取我們所需要的對象。
但是往往我們所做的都是Web Application,這時我們啟動spring容器是通過在web.xml文件中配置,這樣就不適合使用上面的方式在普通類去獲取對象了,因為這樣做就相當於加載了兩次spring容器,而我們想是否可以通過在啟動web服務器的時候,就把Application放在某一個類中,我們通過這個類在獲取,這樣就可以在普通類獲取spring bean對象了。不多說,看實例!
1.在Spring Boot可以掃描的包下
寫的工具類為SpringUtil,實現ApplicationContextAware接口,並加入Component注解,讓spring掃描到該bean
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * 普通類獲取bean * @author lyq */ @Component public class SpringUtil implements ApplicationContextAware { private static Logger logger = LoggerFactory.getLogger(SpringUtil.class); private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } logger.info("ApplicationContext配置成功,applicationContext對象:"+SpringUtil.applicationContext); } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name) { return getApplicationContext().getBean(name); } public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name,Class<T> clazz) { return getApplicationContext().getBean(name,clazz); } }
2.調用方法
ProxyServiceImpl proxyService = SpringUtil.getBean(ProxyServiceImpl.class);
說明:這個獲取bean的類需要先隨者項目啟動,也就是說,調用普通類的方法要放在SpringBoot的測試類或者是啟動類下運行才能獲取到ApplicationContext