SpringBoot項目如何將Bean註入到普通類中
如何將Bean註入到普通類中
Spring管理的類獲得一個註入的Bean方式
@Autowired是一種註解,可以對成員變量、方法和構造函數進行標註,來完成自動裝配的工作,自動執行當前方法,如果方法有參數,會在IOC容器中自動尋找同類型參數為其傳值。
如Controller中註入Bean可以這麼寫:
@RestController public class TestController { @Autowired public TestBean bean;// 配置文件bean }
非Spring管理的類獲得一個註入的Bean方式
上述通過@Autowired註解註入的方式隻可以用在Spring管理的類中,而普通類中通過這樣的方式獲得的Bean為null。
可以使用Spring上下文ApplicationContext獲得Bean的方式,將Bean註入到普通類中
普通類中通過ApplicationContext上下文獲得Bean
public class Test{ //聲明要註入的Bean變量 private static TestBean bean; // 通過applicationContext上下文獲取Bean public static void setApplicationContext(ApplicationContext applicationContext) { bean = applicationContext.getBean(TestBean.class); } }
修改SpringBoot啟動類
將ApplicationContext傳入普通類中
@SpringBootApplication public class TestrApplication { public static void main(String[] args) { final ApplicationContext applicationContext = SpringApplication.run(TestApplication.class, args); // 將上下文傳入Test類中,用於檢測tcp連接是否正常 Test.setApplicationContext(applicationContext); } }
這樣一個Spring的Bean就可以註入到普通類中使用瞭.
在普通類中如何獲取Bean節點
/* * 文件名:SpringContextUtil.java * 描述:獲取bean實例工具類 * 修改人:Wang Chinda * 修改時間:2018/10/30 * 修改內容:新增 */ package com.chinda.utils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * 獲取bean實例工具類 * @author Wang Chinda * @date 2018/10/30 * @see * @since 1.0 */ @Component public class SpringContextUtil implements ApplicationContextAware { /** * 上下文對象實例 */ private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } /** * 獲取applicationContext * * @return */ public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 通過name獲取Bean. * * @param name * @return */ public static Object getBean(String name) { return getApplicationContext().getBean(name); } /** * 通過class獲取Bean. * * @param clazz * @param <T> * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 通過name以及Class返回指定的Bean * * @param name * @param clazz * @param <T> * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 基於Spring上下文工具類 ApplicationContextUtil
- Springboot如何獲取上下文ApplicationContext
- 解決netty中spring對象註入失敗的問題
- springboot 實現bean手動註入操作
- SpringBoot中的main方法註入service