当前位置: 首页 > 知识库问答 >
问题:

Spring未在属性中注入@值注释

楚皓君
2023-03-14

我有以下课程:

@Component
public class Scheduler {

    @Value("${build.version}")
    private String buildVersion;

    public void test() {
         System.out.println(this.buildVersion);
    }

}

我从控制器调用方法test():

@RestController
public class ApiController {

    @GetMapping("/status")
    public StatusResponse status() {
        Scheduler scheduler = new Scheduler();
        scheduler.update();
    }

然而,spring并没有注入构建。版本值,即使类具有组件注释。

我在控制器中使用相同的属性,它工作正常。

我做错了什么?

共有2个答案

孙钱青
2023-03-14

如果您使用application.yml为这些属性提供值,请在类顶部使用@ConfigurationProperties。您不需要为每个属性值提供@Value,例如:

@Component
@Data
@ConfigurationProperties(prefix = "build")
public class SchedulerProperties {

    private String buildVersion;

}

在应用中,yml定义如下

build:
  buildVersion: "XYZ"

然后您可以从属性类中调用版本

@Component
public class Scheduler {

   @Autowired
   private SchedulerProperties schedulerProperties;

    public void test() {
         System.out.println(schedulerProperties.getBuildVersion());
    }

}
谢泉
2023-03-14

尝试这种方法,因为您使用new创建实例,而不是依赖Spring对象管理(控制反转)

@RestController
public class ApiController {


   private Scheduler scheduler;

   @Autowired
   public ApiController(Scheduler scheduler) {
      this.scheduler = scheduler 
   }

   @GetMapping("/status")
   public StatusResponse status() {
      scheduler.update();
  }
}
 类似资料:
  • 我试图向自定义注释中注入一个值,但Spring似乎没有进行评估。

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现

  • 我正在使用spring boot开发REST API。我想在我的项目中使用git。在文件应用程序中。属性我有数据库Url、用户名和密码,我不想在git上推送它们。我不知道如何创建包含数据库配置的文件,以及如何将这些配置注入应用程序。属性。 应用属性

  • 主要内容:构造函数注入,setter 注入,短命名空间注入所谓 Bean 属性注入,简单点说就是将属性注入到 Bean 中的过程,而这属性既可以普通属性,也可以是一个对象(Bean)。 Spring 主要通过以下 2 种方式实现属性注入: 构造函数注入 setter 注入(又称设值注入) 构造函数注入 我们可以通过 Bean 的带参构造函数,以实现 Bean 的属性注入。 使用构造函数实现属性注入大致步骤如下: 在 Bean 中添加一个有参构造函数,构造

  • 主要内容:1.xml方式的属性赋值,2.@Value注解,3.PropertySource1.xml方式的属性赋值 2.@Value注解 Person.java 这里的第一个@Value是直接赋值 第二个是通过简单的计算算出来的 测试: 3.PropertySource 通过外部文件赋值 在配置类中需要添加@PropertySource注解 指定外部文件的位置 测试:

  • 我正在为我们的IT团队编写一个中央控制台,用于显示从Spring Boot Actuator endpoint/configprops检索到的属性,这些属性适用于我们SOA生态系统中运行的每个微服务。我有两个问题 似乎@Value注释的属性没有得到返回,尽管留档说 63.7发现外部属性的内置选项。。。。最终列表来自搜索源代码中的@ConfigurationProperties和@Value注释,以