91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

东山县| 密云县| 和平县| 常宁市| 城市| 湘潭市| 英吉沙县| 什邡市| 延安市| 哈尔滨市| 临武县| 河西区| 长兴县| 永定县| 石门县| 潢川县| 衡东县| 宣武区| 土默特左旗| 和平区| 三原县| 历史| 类乌齐县| 昭平县| 蚌埠市| 凉山| 安化县| 邵东县| 吴桥县| 太白县| 木兰县| 石楼县| 旌德县| 微博| 沂南县| 奉节县| 成安县| 昌吉市| 饶阳县| 娄烦县| 本溪市|