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

關(guān)于@Value注解失效的原因分析

 更新時間:2023年09月21日 15:12:55   作者:阿爾法小師妹  
這篇文章主要介紹了關(guān)于@Value注解失效的原因分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

@Value注解失效的原因分析

@Value的注意事項

  • 1.不能作用于靜態(tài)變量(static);
  • 2.不能作用于常量(final);
  • 3.不能在非注冊的類中使用(類需要被注冊在spring上下文中,如用@Service,@RestController,@Component等);
  • 4.使用這個類時,只能通過依賴注入的方式,用new的方式是不會自動注入這些配置的。

錯誤的方式

/**
 * 抽象工廠+反射
 */
//不能在非注冊的類中使用(類需要被注冊在spring上下文中,如用@Service,@RestController,@Component等);
public class SimpleAbstractFactory  {
    @Value("${packName}")
    //不能作用于靜態(tài)變量(static)
    private static String packName;
    @Value("${sqlName}")
    //不能作用于常量(final);
    private final String sqlName;
    public IUser CreateUser() throws Exception{
            String className=packName+"."+sqlName+"IUser";
            return (IUser)Class.forName(className).newInstance();
    }
    public IDepartment CreateDepartment() throws Exception{
            String className=packName+"."+sqlName+"IDepartment";
            return (IDepartment)Class.forName(className).newInstance();
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-config.xml"})
public class MainToken{
    @Test
	public void testToken() {
		try{
            //使用這個類時,只能通過依賴注入的方式,用new的方式是不會自動注入這些配置的。
			SimpleAbstractFactory  simpleAbstractFactory=new SimpleAbstractFactory();
			User user=new User();
			Department department=new Department();
			IDepartment idp=simpleAbstractFactory.CreateDepartment();
			IUser ius=simpleAbstractFactory.CreateUser();
			idp.insert(department);
			idp.getDepartment(Long.valueOf(1));
			ius.insert(user);
			ius.getUser(Long.valueOf(1));
		}catch(Exception e){
		}
	}
}

正確的方式

/**
 * 抽象工廠+反射
 */
@Service
public class SimpleAbstractFactory  {
    @Value("${packName}")
    private String packName;
    @Value("${sqlName}")
    private String sqlName;
    public IUser CreateUser() throws Exception{
            String className=packName+"."+sqlName+"IUser";
            return (IUser)Class.forName(className).newInstance();
    }
    public IDepartment CreateDepartment() throws Exception{
            String className=packName+"."+sqlName+"IDepartment";
            return (IDepartment)Class.forName(className).newInstance();
    }
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-config.xml"})
public class MainToken {
    @Autowired
	//使用這個類時,只能通過依賴注入的方式,用new的方式是不會自動注入這些配置的。
	private SimpleAbstractFactory simpleAbstractFactory;
    @Test
	public void testToken() {
		try{
			User user=new User();
			Department department=new Department();
			IDepartment idp=simpleAbstractFactory.CreateDepartment();
			IUser ius=simpleAbstractFactory.CreateUser();
			idp.insert(department);
			idp.getDepartment(Long.valueOf(1));
			ius.insert(user);
			ius.getUser(Long.valueOf(1));
		}catch(Exception e){
		}
	}
}

@Value注解失效,HandlerInterceptor讀取為null

問題

在springboot項目中@Value沒有讀取到y(tǒng)aml文件中的變量

原因

spring boot的攔截器/過濾器中要讀取配置文件時,@Value為null,@Resource 的注入也是null,原因是因為加載順序的問題 listener->filter->servlet,所以過濾器/攔截器在初始化的時候,值和類還沒加載

解決方案

在你的HandlerInterceptor的實現(xiàn)類中,手動獲取容器的變量

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
? ? // 從這里開始,先獲取容器
? ? ServletContext context = request.getServletContext();
? ? WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
? ? // 再讀取配置文件中的變量
? ? Environment environment = ctx.getBean(Environment.class);
? ? String verify = environment.getProperty("你在yaml文件中的變量");

這樣就能拿到變量,效果等同于

// ? ?@Value("${XXX.verify}")
// ? ?public ?String verify;

注意:

@Value失效場景:

  • 路徑拼寫錯誤
  • 類的加載順序
  • SpringMVC的父子容器,mvc容器無法讀取spring容器

總結(jié)

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

相關(guān)文章

  • Java前后端分離的在線點餐系統(tǒng)實現(xiàn)詳解

    Java前后端分離的在線點餐系統(tǒng)實現(xiàn)詳解

    這是一個基于SpringBoot+Vue框架開發(fā)的在線點餐系統(tǒng)。首先,這是一個前后端分離的項目。具有一個在線點餐系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧
    2022-01-01
  • java日志打印的完全使用指南

    java日志打印的完全使用指南

    日志就是記錄程序的運行軌跡,方便查找關(guān)鍵信息,也方便快速定位解決問題,下面這篇文章主要給大家介紹了關(guān)于java日志打印使用的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • maven項目引用外部jar包的方法

    maven項目引用外部jar包的方法

    本篇文章主要介紹了maven項目引用外部jar的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • SpringBoot3.4.0無法找到StringRedisTemplate?bean的問題Consider?defining?a?bean?of?type?‘org.springframework

    SpringBoot3.4.0無法找到StringRedisTemplate?bean的問題Consider?def

    本文主要介紹了SpringBoot3.4.0無法找到StringRedisTemplate?bean的問題Consider?defining?a?bean?of?type?‘org.springframework,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Java中List集合去除重復數(shù)據(jù)的方法匯總

    Java中List集合去除重復數(shù)據(jù)的方法匯總

    這篇文章主要給大家介紹了關(guān)于Java中List集合去除重復數(shù)據(jù)的方法,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 關(guān)于IDEA 2020.3 多窗口視圖丟失的問題

    關(guān)于IDEA 2020.3 多窗口視圖丟失的問題

    這篇文章主要介紹了關(guān)于IDEA 2020.3 多窗口視圖丟失的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot中Starter的作用小結(jié)

    SpringBoot中Starter的作用小結(jié)

    這篇文章主要介紹了SpringBoot中Starter的作用小結(jié),Starter其實就是Spring針對不用的開發(fā)場景,給我們提供的“套餐”。今天就通過實例代碼給大家介紹Starter,感興趣的朋友一起看看吧
    2021-10-10
  • Java的微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例

    Java的微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例

    這篇文章主要介紹了Java微信開發(fā)中使用XML格式和JSON格式數(shù)據(jù)的示例,注意一下json-lib所需要的jar包,需要的朋友可以參考下
    2016-02-02
  • Java多線程Semaphore工具的使用詳解

    Java多線程Semaphore工具的使用詳解

    Semaphore 是一種用于控制線程并發(fā)訪問數(shù)的同步工具。它通過維護一定數(shù)量的許可證來限制對共享資源的訪問,許可證的數(shù)量就是可以同時訪問共享資源的線程數(shù)目,需要的朋友可以參考下
    2023-05-05
  • JavaSE詳細講解異常語法

    JavaSE詳細講解異常語法

    異常就是不正常,比如當我們身體出現(xiàn)了異常我們會根據(jù)身體情況選擇喝開水、吃藥、看病、等 異常處理方法。 java異常處理機制是我們java語言使用異常處理機制為程序提供了錯誤處理的能力,程序出現(xiàn)的錯誤,程序可以安全的退出,以保證程序正常的運行等
    2022-05-05

最新評論

抚远县| 荆州市| 新昌县| 临潭县| 读书| 中西区| 湖南省| 开远市| 汕尾市| 浦城县| 运城市| 贵定县| 通城县| 读书| 成安县| 揭阳市| 泽州县| 鹰潭市| 中卫市| 石首市| 墨竹工卡县| 昌黎县| 黄石市| 易门县| 庄浪县| 西和县| 宝清县| 青州市| 惠安县| 镇原县| 浪卡子县| 黄浦区| 偏关县| 锡林浩特市| 保定市| 同江市| 鹿泉市| 西和县| 大洼县| 攀枝花市| 盐池县|