最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

dubbo?filter中有關(guān)bean注入和配置文件讀取方式

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

dubbo filter中有關(guān)bean注入和配置文件讀取

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

但是本地調(diào)試的時(shí)候,發(fā)現(xiàn)報(bào)錯(cuò),注入的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組件實(shí)例化后,setter方法會(huì)被dubbo調(diào)起,然后在ApplicationContext中去查找對(duì)應(yīng)的bean。

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

能夠注入Bean的Filter

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

DelegatingFilterProxy運(yùn)用

需求:

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

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

其實(shí)Spring中,web應(yīng)用啟動(dòng)的順序是: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;
}

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

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

解決辦法2

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

初始化時(shí)通過spring上下文獲取,進(jìn)行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);
 }

總結(jié)

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

相關(guān)文章

  • Spring Boot 事務(wù)實(shí)戰(zhàn)之如何解決 DB 與 MQ 的"雙寫不一致"問題

    Spring Boot 事務(wù)實(shí)戰(zhàn)之如何解決 DB 與 MQ 

    本文結(jié)合代碼案例探討如何利用Spring的 TransactionSynchronizationManager 實(shí)現(xiàn)事務(wù)提交后觸發(fā)(Trigger After Commit)機(jī)制,優(yōu)雅解決數(shù)據(jù)庫與消息隊(duì)列的"雙寫一致性"問題,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java 8實(shí)現(xiàn)圖片BASE64編解碼

    Java 8實(shí)現(xiàn)圖片BASE64編解碼

    Java 8終于有了標(biāo)準(zhǔn)的方法來處理base64的編解碼。Java一直缺少BASE64編碼API,以至于通常在項(xiàng)目開發(fā)中會(huì)選用第三方的API實(shí)現(xiàn)。但是,Java 8實(shí)現(xiàn)了BASE64編解碼API,它包含到j(luò)ava.util包。下面這篇文章我會(huì)對(duì)Java 8的BASE64編解碼做一個(gè)詳細(xì)的介紹。
    2016-10-10
  • 詳解Redis 緩存 + Spring 的集成示例

    詳解Redis 緩存 + Spring 的集成示例

    本篇文章主要介紹了Redis 緩存 + Spring 的集成示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java中多線程同步類 CountDownLatch

    Java中多線程同步類 CountDownLatch

    本篇文章主要介紹了Java中多線程同步類 CountDownLatch的相關(guān)知識(shí),具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-05-05
  • 淺談Java文件執(zhí)行順序、main程序入口的理解

    淺談Java文件執(zhí)行順序、main程序入口的理解

    這篇文章主要介紹了Java文件執(zhí)行順序、main程序入口的理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JVM內(nèi)存與CPU占用過高問題定位及解決

    JVM內(nèi)存與CPU占用過高問題定位及解決

    文章介紹了一種通過排查思路定位Java程序中CPU和內(nèi)存占用過高的問題的方法,通過運(yùn)行一個(gè)模擬無限添加byte[]的代碼,使用top命令查看進(jìn)程占用情況,然后通過查看線程列表和輸出堆棧信息,最終定位到具體的代碼方法
    2026-01-01
  • Java NIO 底層原理解析

    Java NIO 底層原理解析

    Java IO讀寫通過系統(tǒng)調(diào)用在內(nèi)核與進(jìn)程緩沖區(qū)間傳輸數(shù)據(jù),不直接操作磁盤,本文給大家介紹Java NIO 底層原理解析,感興趣的朋友一起看看吧
    2025-07-07
  • Java基于正則表達(dá)式獲取指定HTML標(biāo)簽指定屬性值的方法

    Java基于正則表達(dá)式獲取指定HTML標(biāo)簽指定屬性值的方法

    這篇文章主要介紹了Java基于正則表達(dá)式獲取指定HTML標(biāo)簽指定屬性值的方法,涉及java基于正則的HTML元素匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Java11?中基于嵌套關(guān)系的訪問控制優(yōu)化問題

    Java11?中基于嵌套關(guān)系的訪問控制優(yōu)化問題

    在?Java?語言中,類和接口可以相互嵌套,這種組合之間可以不受限制的彼此訪問,包括訪問彼此的構(gòu)造函數(shù)、字段、方法,接下來通過本文給大家介紹Java11中基于嵌套關(guān)系的訪問控制優(yōu)化問題,感興趣的朋友一起看看吧
    2022-01-01
  • Java語言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP連接管理模塊實(shí)現(xiàn)(8)

    Java語言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP連接管理模塊實(shí)現(xiàn)(8)

    這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP連接管理模塊的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評(píng)論

神农架林区| 灯塔市| 镇雄县| 大城县| 宽甸| 长沙市| 延津县| 随州市| 晋州市| 日喀则市| 大宁县| 射洪县| 永泰县| 南部县| 望城县| 洛南县| 梅河口市| 罗平县| 乌鲁木齐县| 师宗县| 惠安县| 千阳县| 蒲城县| 双辽市| 铜陵市| 迭部县| 忻州市| 南木林县| 上杭县| 侯马市| 临漳县| 若尔盖县| 竹北市| 财经| 西乌珠穆沁旗| 乾安县| 华阴市| 哈密市| 尚志市| 福贡县| 瑞金市|