zoukankan      html  css  js  c++  java
  • @Value()读取配置文件属性,读出值为null的问题

    一、问题描述

    自定义一个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对象中就可以使用相关的配置信息了

  • 相关阅读:
    Spring AOP总结(三)
    Spring AOP源码解析(二)
    java9新特性
    BeanFactory和ApplicationContext的区别总结
    Elasticsearch7.X为什么移除类型(type)
    elasticsearch性能优化(二)
    elasticsearch性能优化(一)
    elasticsearch的master选举机制
    自动化构建和部署应用系统平台
    关系型数据库之mysql-01
  • 原文地址:https://www.cnblogs.com/a-du/p/10836492.html
Copyright © 2011-2022 走看看