SpringBoot 之 普通類獲取Spring容器中的bean ,


難為一天多,終於解決,問題在於建造者模式下,引入另一個類時,此類中如下代碼
@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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM