开发者

SpringBoot的ConfigurationProperties或Value注解无效问题及解决

目录
  • SpringBoot的ConfigurationProperties或Value注解无效
    • 记录一个问题
    • 发现问题所在
    • 解决方法
  • 总结python

    SandroidpringBoot的ConfigurationProperties或Value注解无效

    记录一个问题

    在一般的SpringBoot项目开发中,我们一般会创建一些全局的静态配置类,用来读取application.yml/application.properties配置文件的内容。

    普遍的做法是利用@Component和@ConfigurationProperties(prefix = “XXX”)这两个注解来帮我们实现。

    # 项目相关配置
    cadre:
      # android名称
      name: cadreuc
    package com.cadre.common.config;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * 全局配置类
     *
     * @author cadre
     */
    @Component
    @ConfigurationProperties(prefix = "cadreman")
    public class Global
    {
        /** 项目名称 */
        private static String name编程客栈;
    
        public static String getName()
        {
            return name;
        }
    
        public static void setName(String name)
        {
            Global.name = name;
        }
    }
    

    原理非常简单,利用Spring将属性注入到静态类,然后通过静态类的特性php使我们可以在项目全局取到它的值。

    但是,当我们照猫画虎的创建了一个静态类后,却发现我们取的值始终为null。

    难道是Component注解失效了吗?并不是,我们创建一个同名的Bean后提示命名重复。

    难道是ConfigurationProperties注解失效了吗?带着疑问,我们继续研究。

    发现问题所在

    作为一名资深的CV程序员,已经多年没有手打过Get/Set方法了。

    然而问题就在这里。当我们创建了一个静态属性时,IDE帮我们生成的Get/Set方法都默认加上了static。

    	/** 项目名称 */
        private static String name;
    
    	public static String getName()
        {
            return name;
        }
    
        public static void setName(String name)
        {
            Global.name = name;
        }
        

    而Spring在注入这些属性时,反射的Set方法不会对static方法起作用。

    所以导致了我们的set方法没有被调用。

    解决方法

    去掉Set方法的static

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜