中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

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

這篇文章主要為大家展示了“Springboot怎么通過自定義工具類獲取bean”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“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作為參數傳給次方法,然后我們可以把工廠賦值給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攔截器時,需要訪問數據庫來判斷是否攔截請求,這時就需要在攔截器的判斷類中注入Dao或Service對象來執行sql語句。而直接使用@Autowired無法進行注入。

2.使用環境

spring boot 2.0.3

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

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

第一步:準備ApplicationContextAware的實現類,用于獲取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;
    }
}

這是已經寫好的工具類,可以根據bean的id獲取對應的bean

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

如:

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

第三步: 在要使用的類中寫一個方便調用的方法

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

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

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

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

@Autowired 
private BasicDaoImpl basicDaoImpl;

第三步:在創建該工具類的地方,這樣定義

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

5.方法三:在spring Boot 啟動時創建工具類自身的靜態對象

在本質上,同方法二

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

第二步:在工具類創建一個自身的靜態對象

public static AuthInterceptor authInterceptor;

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

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

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

向AI問一下細節

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

AI

遂昌县| 平江县| 陇川县| 夏河县| 阿瓦提县| 沾益县| 平原县| 新平| 牟定县| 商河县| 灵武市| 巴彦淖尔市| 读书| 讷河市| 靖安县| 纳雍县| 丹阳市| 六枝特区| 安国市| 太仆寺旗| 修水县| 湘阴县| 崇仁县| 松原市| 阜南县| 泰顺县| 吴江市| 新河县| 岑巩县| 肥西县| 车险| 开阳县| 公安县| 南昌市| 临夏县| 宣恩县| 额敏县| 黎城县| 阳谷县| 若尔盖县| 安平县|