当前位置: 代码网 > it编程>编程语言>Java > SpringBoot的ConfigurationProperties或Value注解无效问题及解决

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

2024年11月02日 Java 我要评论
springboot的configurationproperties或value注解无效记录一个问题在一般的springboot项目开发中,我们一般会创建一些全局的静态配置类,用来读取applicat

springboot的configurationproperties或value注解无效

记录一个问题

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

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

# 项目相关配置
cadre:
  # 名称
  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将属性注入到静态类,然后通过静态类的特性使我们可以在项目全局取到它的值。

但是,当我们照猫画虎的创建了一个静态类后,却发现我们取的值始终为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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com