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。

推薦閱讀: