@Value始终为null

时间:2015-06-10 21:02:49

标签: spring-boot spring-annotations spring-properties

我遇到的情况是,我尝试使用@Value注释会导致值为null。

这是大型项目的一部分,我不确定需要哪些部分。我正在使用Java anotations(没有xml文件)和Spring启动。

@Configuration
@EnableAutoConfiguration
@EnableConfigurationProperties
@ComponentScan
public class RESTApplication {
    public static void main(String[] args) {
        SpringApplication.run(RESTApplication.class, args);
    }
}

application.properties包含:

maxuploadfilesize=925000000

我确实尝试创建一个PropertySourcesPlaceholderConfigurer,因为有些网站提到了这样做。

@Configuration
public class AppConfig {
    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

以下是尝试使用它的类:

@Component
public class MyClass {
    @Value("${maxuploadfilesize}")
    String maxFileUploadSize;

    public String getMaxFileUploadSize() {
        return maxFileUploadSize;
    }

    public void setMaxFileUploadSize(String maxFileUploadSize) {
        this.maxFileUploadSize = maxFileUploadSize;
    }
}

但是在运行时,maxFileUploadSize始终为null。请注意下面的调试注释,其中PropertySourcesPropertyResolver似乎在application.properties文件中找到了正确的值。

2015-06-10 13:50:20.906 DEBUG 21108 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Searching for key 'maxuploadfilesize' in [applicationConfig: [classpath:/application.properties]]
2015-06-10 13:50:20.906 DEBUG 21108 --- [           main] o.s.c.e.PropertySourcesPropertyResolver  : Found key 'maxuploadfilesize' in [applicationConfig: [classpath:/application.properties]] with type [String] and value '925000000'

1 个答案:

答案 0 :(得分:4)

看起来MyClass没有被处理为SpringBean,这意味着@ Value-annotation没有被处理。 您可以通过提供默认值来检查,例如@Value("${maxuploadfilesize:'100'}")。如果该值仍为null,那么您知道,MyClass未实例化为SpringBean。

由于它是用@Component注释的,你应该能够简单地注入它 @Autowired private MyClass myclass;