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

  • 相关阅读:
    单例模式(上)单例常见的实现方式
    Netty(六)揭开 BootStrap 的神秘面纱
    Netty(五)Netty 高性能之道
    Netty(四)基于Netty 的简易版RPC
    Netty(三)基于Bio和Netty 的简易版Tomcat
    Netty(二)Netty 与 NIO 之前世今生
    java学习笔记
    Java使用笔记之对象比较
    React学习之受控和非受控组件
    SpringBoot学习之常用注解
  • 原文地址:https://www.cnblogs.com/a-du/p/10836492.html
Copyright © 2011-2022 走看看