Spring Boot @Value为空

时间:2018-07-17 18:17:43

标签: java spring-boot

在开始之前,是的,我知道这里还有另一个问题,但是它们不是同一问题,我找不到任何解决方法。

好,我有

package a
imports ...
@SpringBootApplication
public class LauncherApplication implements CommandLineRunner {

  @Autowired
  private SubListener subListener;

  @Value("${proj.id}")
  private String testy;

  public static void main(String[] args) {
    SpringApplication.run(LauncherApplication.class, args);

}


@Override
public void run(String... args) throws Exception {
    System.out.println(subListener.getProjID());
    System.out.println(testy);
  }
}

然后在我的subListener上

package a.b
imports ...
@Component
public class SubListener {

  @Value("${proj.id}")
  private String projID;

  public String getProjID() {
    return projID;
  }
}

最后在application.properties的我的资源文件夹中

proj.id=Hello from file

现在,从所有方面来看,这应该起作用,SpringBootApplication具有组件扫描功能,bean被标记为@component,并且是springbootapplication的子包,属性文件具有默认名称,并且位于默认目录中。我找不到导致此失败的单一原因。另外请注意,当我在testy上调用该属性时,该属性可以正常工作,但仅在从子侦听器返回时才返回null。

谢谢您的时间

编辑:

新启动器应用程序

@SpringBootApplication
public class LauncherApplication {

    public static void main(String[] args) {
        SpringApplication.run(LauncherApplication.class, args);

    }

    @Bean
  public CommandLineRunner runner(SubListener subListener){
      CommandLineRunner runner = new CommandLineRunner() {
      @Override
      public void run(String... args) throws Exception {
        System.out.println(subListener.getProjID());
      }
    };
    return runner;
  }
}

尽管它仍然返回null

1 个答案:

答案 0 :(得分:2)

我唯一的猜测是您的SubListener类中的@Value注释来自错误的程序包。能否请您检查您是否正在使用此导入,而不要使用其他导入方法:

import org.springframework.beans.factory.annotation.Value;

我已经复制了您的代码,并且对我有用。如果仍然无法正常工作,那么建议您尝试在一个新的空项目中重现它。