我在使用@PropertySource
时遇到了一些问题,我在使用env.getProperty(..)
时获得了NPE。
有没有人有任何见解?
我的环境:
stacktrace:
Exception in thread "main" java.lang.NullPointerException
at com.mycompany.app.ExpressiveConfig.main(ExpressiveConfig.java:33)
属性文件/src/main/resources/com/mycompany/app/app.properties
:
disc.title=Sgt.PeppersLonelyHeartsClubBand
disc.artist=TheBeatles
我的配置类:
package com.mycompany.app;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.core.env.Environment;
@PropertySource("classpath:/com/mycompany/app/app.properties")
public class ExpressiveConfig {
@Autowired
Environment env;
@Bean
public App get() {
return new App("hello", env.getProperty("disc.artist"));
}
public static void main(String args[]) {
App a = new ExpressiveConfig().get();
}
}
模特课:
package com.mycompany.app;
import org.springframework.stereotype.Component;
public class App {
private final String title;
private final String artist;
public App(String title, String artist) {
this.title = title;
this.artist = artist;
}
public String getTitle() {
return title;
}
public String getArtist() {
return artist;
}
}
尝试失败:
我尝试过使用@PropertySource
注释,例如使用file:prefix和属性文件的绝对路径。
在类路径之前删除反斜杠,例如/ @ PropertySource(“classpath:com / mycompany / app / app.properties”)。
将属性文件放在不同的位置。
我也尝试过使用包含@PropertySources
注释的@PropertySource
。
我添加了:
@Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ 返回新的PropertySourcesPlaceholderConfigurer(); }
非常感谢任何帮助/建议!!
答案 0 :(得分:1)
Spring只会将依赖关系注入到它自己管理的bean中。由于您自己创建该实例(new ExpressiveConfig()
),因此不会执行依赖注入,因为Spring实际上根本没有涉及。
您需要使用该类型的bean定义创建应用程序上下文,并从那里检索实例。
要做到这一点,请将您的ExpressiveConfig
注释为春天@Configuration
,然后将该类传递给AnnotationConfigApplicationContext
,而不是将其自我实例化。然后,您就可以使用getBean(...)
从上下文中检索您的bean。