欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

dubbo?filter中有關bean注入和配置文件讀取方式

 更新時間:2024年05月16日 08:43:54   作者:weixin_45614626  
這篇文章主要介紹了dubbo?filter中有關bean注入和配置文件讀取方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

dubbo filter中有關bean注入和配置文件讀取

在寫dubbo的filter時候,需要注入bean和讀取配置文件,然后理所當然的就像springboot其他地方的寫法一樣,直接用了@Resource和@Value注解。

但是本地調(diào)試的時候,發(fā)現(xiàn)報錯,注入的bean和讀取的配置變量全部為null,很是不解,于是就上網(wǎng)查了以下資料。

首先,dubbo的攔截器這些組件是由dubbo自己管理的,并不是直接由spring管理的,因此spring的那些注入注解在dubbo里統(tǒng)統(tǒng)不能用。

如果想用可以采取以下代碼:

	private Environment environment;

    public void setEnvironment(Environment environment){
        this.environment=environment;
    }
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        String headerTopic = environment.getProperty("spring.kafka.header-topic");
        Result result = invoker.invoke(invocation);
        return result;
    }

這樣就可以讀取到配置文件了。

如果想要注入bean,則使用以下代碼:

private KafkaTemplate<String, String> headKafkaTemplate;
public void setHeadKafkaTemplate(KafkaTemplate<String, String> headKafkaTemplate){
        this.headKafkaTemplate = headKafkaTemplate;
    }

dubbo組件實例化后,setter方法會被dubbo調(diào)起,然后在ApplicationContext中去查找對應的bean。

而且在查找的過程中是優(yōu)先按照名字去匹配,然后才是type,所以盡量把setter方法名字寫成要注入的bean的名字。

能夠注入Bean的Filter

DelegatingFilterProxy就是一個對于servlet filter的代理,用這個類的好處主要是通過Spring容器來管理servlet filter的生命周期,還有就是如果filter中需要一些Spring容器的實例,可以通過spring直接注入,另外讀取一些配置文件這些便利的操作都可以通過Spring來配置實現(xiàn)。

DelegatingFilterProxy運用

需求:

在springboot中 使用了filter, 并且注入了業(yè)務工具類(APIUtil ),但注入是null

所以問題就來了:springboot中使用filter時注入bean為null的解決辦法

其實Spring中,web應用啟動的順序是:listener->filter->servlet,先初始化listener,然后再來就filter的初始化,再接著才到我們的dispathServlet的初始化

解決辦法1

public class TokenAuthFilter implements Filter {
 
    private final static Logger log = LoggerFactory.getLogger(TokenAuthFilter.class);
 
    @Autowired
    private APIUtil apiUtil;
}

新增一個config類,用來手工創(chuàng)建filter的bean, 例如:

@Configuration
public class WebConfig {
 
  @Bean
    public Filter tokenAuthFilter() {
 
        return new TokenAuthFilter(); //第一步:先將filter放入容器
    }
    /**
     * 注冊filter,統(tǒng)一處理api開頭的請求
     * @return FilterRegistrationBean
     */
    @Bean
    public FilterRegistrationBean tokenAuthFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        // 第二步:DelegatingFilterProxy把servlet 容器中的filter同spring容器中的bean關聯(lián)起來
        registration.setFilter(new DelegatingFilterProxy("tokenAuthFilter"));
        registration.addUrlPatterns("/api/*");
        registration.setName("tokenAuthFilter");
        registration.setOrder(1);
        return registration;
    }
}

解決辦法2

過濾器是servlet規(guī)范中定義的,并不歸spring容器管理,也無法直接注入spring中的bean(會報錯)

初始化時通過spring上下文獲取,進行bean的初始化:

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());
    RedisTemplate demoBean = (RedisTemplate)context.getBean("redisTemplate");
    System.out.println(demoBean);
 }

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java工廠模式用法之如何動態(tài)選擇對象詳解

    Java工廠模式用法之如何動態(tài)選擇對象詳解

    工廠設計模式可能是最常用的設計模式之一,我想大家在自己的項目中都用到過。本文不僅僅是關于工廠模式的基本知識,更是討論如何在運行時動態(tài)選擇不同的方法進行執(zhí)行,你們可以看看是不是和你們項目中用的一樣
    2023-03-03
  • 淺談springboot自動裝配原理

    淺談springboot自動裝配原理

    作為Spring Boot的精髓,自動配置原理首當其沖.今天就帶大家了解一下springboot自動裝配的原理,文中有非常詳細的代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • 通過Feign進行調(diào)用@FeignClient?找不到的解決方案

    通過Feign進行調(diào)用@FeignClient?找不到的解決方案

    這篇文章主要介紹了通過Feign進行調(diào)用@FeignClient?找不到的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • JVM常見垃圾收集器學習指南

    JVM常見垃圾收集器學習指南

    這篇文章主要為大家介紹了JVM常見垃圾收集器學習指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 一篇文章帶你了解Java SpringBoot Nacos

    一篇文章帶你了解Java SpringBoot Nacos

    這篇文章主要介紹了SpringBoot使用Nacos配置中心的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • Java中性能優(yōu)化的35種方法匯總

    Java中性能優(yōu)化的35種方法匯總

    很多同學在日常寫Java的時候很少去關心性能問題,但是在我們寫代碼的過程中必須考慮到性能對程序的影響。小到我們使用位運算來實現(xiàn)算術運算,大到我們對 Java 代碼的總體架構設計,性能其實離我們很近。本文介紹了Java中性能優(yōu)化的35種方法,需要的朋友可以參考下。
    2017-01-01
  • Spring Boot集成redis,key自定義生成方式

    Spring Boot集成redis,key自定義生成方式

    這篇文章主要介紹了Spring Boot集成redis,key自定義生成方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot實現(xiàn)前后端分離國際化的示例詳解

    SpringBoot實現(xiàn)前后端分離國際化的示例詳解

    Springboot國際化可以幫助使用者在不同語言環(huán)境中構建應用程序,這樣應用程序可以有效地適應不同語言文化背景下的用戶需求。本文主要介紹了SpringBoot實現(xiàn)前后端分離國際化的方法,需要的可以參考一下
    2023-02-02
  • Java Web文件上傳與下載優(yōu)化的實現(xiàn)方案

    Java Web文件上傳與下載優(yōu)化的實現(xiàn)方案

    文件上傳與下載是 Web 應用中常見的功能,尤其是在需要處理大量文件傳輸、存儲的場景下,傳統(tǒng)的文件上傳和下載方式雖然簡單,但如果不加以優(yōu)化,可能會帶來一些問題,所以今天,我們將深入探討 Java Web 中如何實現(xiàn)高效的文件上傳和下載,需要的朋友可以參考下
    2025-02-02
  • SpringBoot加載應用事件監(jiān)聽器代碼實例

    SpringBoot加載應用事件監(jiān)聽器代碼實例

    這篇文章主要介紹了SpringBoot加載應用事件監(jiān)聽器代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06

最新評論