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

Springboot?Filter中注入bean無效為null問題

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

Springboot Filter注入bean無效為null問題

問題原因

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

Lisenter->Fliter->Servlet

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

還沒有初始化Servlert

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

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

解決辦法

添加初始化bean配置,手動創(chuàng)建對象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是手動創(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; 
 
}

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

至此問題解決!

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

描述問題

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

問題原因

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

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

如何解決

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

    java的四種常用輸入方法你會幾種

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

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

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

    Maven安裝過程圖文詳解

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

    SpringCloud的Hystrix簡單介紹

    這篇文章主要介紹了SpringCloud的Hystrix簡單介紹,SpringCloud Hystrix是Netflix開源的一款容錯框架,具備服務(wù)降級,服務(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排序的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • SpringBoot詳細(xì)講解斷言機(jī)制原理

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

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

最新評論