溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot怎么通過自定義工具類獲取bean

發(fā)布時間:2021-09-26 09:55:21 來源:億速云 閱讀:242 作者:小新 欄目:開發(fā)技術

這篇文章主要為大家展示了“Springboot怎么通過自定義工具類獲取bean”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Springboot怎么通過自定義工具類獲取bean”這篇文章吧。

Springboot 自定義工具類獲取bean

/**
 * Created with IntelliJ IDEA.
 *
 * @Auther: zp
 * @Date: 2021/03/26/13:32
 * @Description: 通過beanFactory獲取spring管理的bean對象工具類
 */
@Component
public class ApplicationContextUtil implements ApplicationContextAware {
    private static ApplicationContext context;
 
    // springboot加載完成后會把beanfactory作為參數(shù)傳給次方法,然后我們可以把工廠賦值給context。
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        context = applicationContext;
    }
    // 通過context獲取bean
    public static Object getBean(String beanName) {
        return context.getBean(beanName);
    }
}

在工具類注入bean的三種方式

1. 需求/目的

比如:在進行使用HandlerInterceptorAdapter攔截器時,需要訪問數(shù)據(jù)庫來判斷是否攔截請求,這時就需要在攔截器的判斷類中注入Dao或Service對象來執(zhí)行sql語句。而直接使用@Autowired無法進行注入。

2.使用環(huán)境

spring boot 2.0.3

3.方法一:獲取ApplicationContext上下文

在applicationContext對象中可以獲取到所有的bean

第一步:準備ApplicationContextAware的實現(xiàn)類,用于獲取applicationContext對象

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import com.authstr.ff.utils.exception.Assert;
@Component
public class SpringUtils implements ApplicationContextAware {
    private static Log log = LogFactory.getLog(SpringUtils.class);
    private static ApplicationContext applicationContext;
    public   void setApplicationContext(ApplicationContext applicationContext) {
        SpringUtils.applicationContext = applicationContext;
    }
    private static ApplicationContext getContext() {
        return applicationContext;
    }
    public static Object getBean(String beanId) {
        return SpringUtils.getBean(Object.class, beanId);
    }
    public static <T> T getBean(Class<T> clazz, String beanId) throws ClassCastException {
        ApplicationContext context = SpringUtils.getContext();
        Assert.isTrue(StringUtils.hasText(beanId), "beanId must not null!",true);
        boolean a=context.containsBean(beanId);
        Assert.isTrue(context.containsBean(beanId), "beanId :[" + beanId + "] is not exist!",true);
        Object bean = null;
        bean = context.getBean(beanId);
        return (T)bean;
    }
}

這是已經(jīng)寫好的工具類,可以根據(jù)bean的id獲取對應的bean

第二步: 對要獲取的bean設置id

如:

@Component("basicDaoImpl")
public class BasicDaoImpl extends AbstractDao implements BasicDao

第三步: 在要使用的類中寫一個方便調(diào)用的方法

public BasicDaoImpl getBasicDaoImpl (){
        return SpringUtils.getBean(BasicDaoImpl .class, "basicDaoImpl");
    }

4.方法二:將工具類的對象也添加為bean

第一步:當前類添加@Component注解

第二步:對要獲取的對象使用@Autowired 注解

@Autowired 
private BasicDaoImpl basicDaoImpl;

第三步:在創(chuàng)建該工具類的地方,這樣定義

@Bean
  public AuthInterceptor authInterceptor(){
        return new AuthInterceptor();
    }

5.方法三:在spring Boot 啟動時創(chuàng)建工具類自身的靜態(tài)對象

在本質(zhì)上,同方法二

第一步:當前類添加@Component注解

第二步:在工具類創(chuàng)建一個自身的靜態(tài)對象

public static AuthInterceptor authInterceptor;

第三步:使用@PostConstruct注解,在springboot加載時執(zhí)行該方法

  @PostConstruct
    public void init() {
        authInterceptor= this;
        AuthInterceptor .authInterceptor= this.authInterceptor;
    }

以上是“Springboot怎么通過自定義工具類獲取bean”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI