亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot?Filter中注入bean無(wú)效為null問(wèn)題

 更新時(shí)間:2024年05月17日 08:45:51   作者:l梁晴  
這篇文章主要介紹了Springboot?Filter中注入bean無(wú)效為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Springboot Filter注入bean無(wú)效為null問(wèn)題

問(wèn)題原因

Web應(yīng)用的啟動(dòng)順序是:

Lisenter->Fliter->Servlet

應(yīng)用程序上下文, 初始化 Fliter的時(shí)候,

還沒(méi)有初始化Servlert

所有沒(méi)有進(jìn)入DispacterServlet的初始化

故在Fliter中使用注解注入bean為空;

解決辦法

添加初始化bean配置,手動(dòng)創(chuàng)建對(duì)象new

代碼如下:

package com.test.config;
 
import com.alibaba.druid.support.http.StatViewServlet;
import com.test.service.RequestFilter;
import javax.servlet.Filter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.DelegatingFilterProxy;
 
/**
 * @author lucasliang
 * @date 08/11/2018 5:56 afternoon filter load before dispathServlet ,so load RequestFilter as a
 * bean,new a RequestFilter
 */
@Configuration
public class FilterConfig {
 
  /*
    *@param: []
    *@return javax.servlet.Filter
    *@author lucasliang
    *@date 20/12/2018
    *@Description filter
   */
  @Bean
  public Filter uploadFilter() {
    return new RequestFilter();
  }
 
 
  /*
    *@param: []
    *@return org.springframework.boot.web.servlet.FilterRegistrationBean
    *@author lucasliang
    *@date 20/12/2018
    *@Description filter
   */
  @Bean
  @SuppressWarnings("unchecked")
  public FilterRegistrationBean testFilterRegistration() {
    FilterRegistrationBean registration = new FilterRegistrationBean();
    registration.setFilter(new DelegatingFilterProxy("uploadFilter"));
    registration.addUrlPatterns("/*");
    registration.addInitParameter("paramName", "paramValue");
    registration.setName("testFilter");
    registration.setOrder(1);
    registration.setEnabled(false);
    return registration;
  }
 
}

其中RequestFilter是手動(dòng)創(chuàng)建的bean

實(shí)現(xiàn)了Filter接口

package com.test.service;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; 
 
public class RequestFilter implements Filter {
 
  private Logger logger = LoggerFactory.getLogger(Filter.class);
 
 
  @Value(value = "${encodeRules}")
  private String encodeRules; 
 
}

此時(shí),在RequestFilter中使用@Value注解,就可以取到值了,注入bean也相同,會(huì)取到對(duì)應(yīng)的bean。

至此問(wèn)題解決!

關(guān)于Spring中,注入的bean為null的情況

描述問(wèn)題

在寫項(xiàng)目的時(shí)候,寫了一個(gè)工具類或者測(cè)試類,然后調(diào)用相關(guān)的service層或者dao層的bean,但是通通為null,為啥呢?

問(wèn)題原因

兩種情況會(huì)導(dǎo)致如此問(wèn)題,一個(gè)是工具類中的方法為靜態(tài)方法,靜態(tài)方法調(diào)用了bean,但是由于spring的加載機(jī)制,是加載靜態(tài)代碼-》構(gòu)造函數(shù)-》注入bean-》postconstuct的順序執(zhí)行,因此靜態(tài)方法里調(diào)用的bean,并沒(méi)有注入相應(yīng)的bean,因此為空,所以會(huì)出現(xiàn)bean為null的情況。

另一種情況是,調(diào)用工具類的時(shí)候,new了一個(gè)工具類的實(shí)例,該應(yīng)用里的實(shí)例都是交給spring IOC容器去看管維護(hù)的,現(xiàn)在突然new出來(lái)一個(gè)實(shí)例,spring IOC容器是沒(méi)有去看管他的,所以并不在同一個(gè)上下文中,那么new出來(lái)的這個(gè)類里面的實(shí)例方法,當(dāng)然也調(diào)用不到spring IOC上下文里的實(shí)例了,所以當(dāng)你調(diào)用你new出來(lái)的實(shí)例的方法時(shí)候,該方法里調(diào)用的spring的bean,都是沒(méi)有注入的對(duì)象的。

如何解決

解決辦法同樣有兩種,針對(duì)上面說(shuō)的第一個(gè)問(wèn)題的解決辦法是,使用注解@postconstruct的方法,手動(dòng)注入bean,因?yàn)閜ostconstruct的方法,在bean加載完成之后,init之前執(zhí)行,所以在這個(gè)時(shí)間點(diǎn),注入相應(yīng)的bean對(duì)象,就會(huì)生效。

第二種方法是,直接把該工具類作為spring的一個(gè)bean組件,使用@component,在業(yè)務(wù)層調(diào)用的時(shí)候,也同樣使用注入的方式注入該工具類,這樣也可以解決問(wèn)題了。

總結(jié)

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

相關(guān)文章

  • Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(jì)(學(xué)生功能)

    Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(jì)(學(xué)生功能)

    這篇文章主要介紹了Java實(shí)現(xiàn)在線考試系統(tǒng)與設(shè)計(jì)(學(xué)生功能),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot中使用多線程的方法示例

    SpringBoot中使用多線程的方法示例

    這篇文章主要介紹了SpringBoot中使用多線程的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java集合中的WeakHashMap、IdentityHashMap、EnumMap詳解

    Java集合中的WeakHashMap、IdentityHashMap、EnumMap詳解

    這篇文章主要介紹了Java集合中的WeakHashMap、IdentityHashMap、EnumMap詳解,HashMap的key保留了對(duì)實(shí)際對(duì)象的強(qiáng)引用,這意味著只要HashMap對(duì)象不被銷毀,還HashMap的所有key所引用的對(duì)象就不會(huì)被垃圾回收,需要的朋友可以參考下
    2023-09-09
  • java的四種常用輸入方法你會(huì)幾種

    java的四種常用輸入方法你會(huì)幾種

    這篇文章主要介紹了java四種常用輸入方法的相關(guān)資料,分別是Scanner、System、命令行和JOptionPane,每種方法都有其特點(diǎn)和適用場(chǎng)景,文中提供了詳細(xì)的代碼示例,需要的朋友可以參考下
    2025-03-03
  • idea導(dǎo)入項(xiàng)目不顯示maven側(cè)邊欄的問(wèn)題及解決方法

    idea導(dǎo)入項(xiàng)目不顯示maven側(cè)邊欄的問(wèn)題及解決方法

    這篇文章主要介紹了idea導(dǎo)入項(xiàng)目不顯示maven側(cè)邊欄的問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Maven安裝過(guò)程圖文詳解

    Maven安裝過(guò)程圖文詳解

    這篇文章主要介紹了Maven安裝過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-07-07
  • SpringCloud的Hystrix簡(jiǎn)單介紹

    SpringCloud的Hystrix簡(jiǎn)單介紹

    這篇文章主要介紹了SpringCloud的Hystrix簡(jiǎn)單介紹,SpringCloud Hystrix是Netflix開源的一款容錯(cuò)框架,具備服務(wù)降級(jí),服務(wù)熔斷,依賴隔離,監(jiān)控(Hystrix Dashboard)等功能,同樣具有自我保護(hù)能力,需要的朋友可以參考下
    2023-07-07
  • Java8中的類型注解淺析

    Java8中的類型注解淺析

    這篇文章主要介紹了Java8中的類型注解淺析,java8之前,注解只能是在聲明的地方所使用,java8里面的注解則可以應(yīng)用在任何地方,需要的朋友可以參考下
    2014-06-06
  • java中TreeMap排序的示例代碼

    java中TreeMap排序的示例代碼

    本篇文章主要介紹了java中TreeMap排序的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • SpringBoot詳細(xì)講解斷言機(jī)制原理

    SpringBoot詳細(xì)講解斷言機(jī)制原理

    斷言Assertion是測(cè)試方法中的核心部分,用來(lái)對(duì)測(cè)試需要滿足的條件進(jìn)行驗(yàn)證。這些斷言方法都是org.junit.jupiter.api.Assertions的靜態(tài)方法。檢查業(yè)務(wù)邏輯返回的數(shù)據(jù)是否合理。所有的測(cè)試運(yùn)行結(jié)束以后,會(huì)有一個(gè)詳細(xì)的測(cè)試報(bào)告
    2022-06-06

最新評(píng)論