码迷,mamicode.com
首页 > 其他好文 > 详细

@Value()读取配置文件属性,读出值为null的问题

时间:2019-05-09 09:22:14      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:解决方法   文件   extend   att   nal   div   end   一个   style   

一、问题描述

自定义一个Filter如下:

@Component
public class JwtFilter extends GenericFilterBean{
 
    @Value("${jwt.header}")
    private String header;  //此处无法注入 值为 null
在config中将此filter注册给spring

@Configuration
@AutoConfigureAfter(JwtFilter.class)
public class JwtConfig {
    @Bean
    public FilterRegistrationBean jwtFilter() {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new JwtFilter());  //率先执行
        String[] paths = jwtProperty.getCheckPath().split(",");
        for (String p : paths){
            registrationBean.addUrlPatterns(p);
            System.out.println(p);
        }
        return registrationBean;
    }
}

原因:执行顺序问题,config率先执行,new JwtFilter()会构造一个filter对象交给spring,而此时 @Value还未读取配置,所以在JwtFilter中的 @Value值为 null。

解决方法: 使用一个类来读取配置

@Component
@Data
public class JwtProperty {
 
    @Value("${jwt.header}")
    private String header;
 
    @Value("${jwt.tokenHead}")
    private String tokenHead;
 
    @Value("${jwt.secret}")
    private String secret;
 
    @Value("${jwt.checkPath}")
    private String checkPath;
 
    @Value("${jwt.expiration}")
    private Integer expire;
 
    public JwtProperty() {
    }
}

然后将其注入到config中

@Configuration
public class JwtConfig {
 
 
    @Autowired
    private JwtProperty jwtProperty;

在 构造JwtFilter时,作为参数传入构造函数

new JwtFilter(jwtProperty)
则,在 JwtFilter对象中就可以使用相关的配置信息了

@Value()读取配置文件属性,读出值为null的问题

标签:解决方法   文件   extend   att   nal   div   end   一个   style   

原文地址:https://www.cnblogs.com/a-du/p/10836492.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!