我正在尝试从我的应用程序对象中的.properties文件中获取属性。我对如何执行此操作的唯一知识是通过Environment
对象。
在我的配置中效果很好......
@Configuration
@ComponentScan(basePackages = {
"com.production"
})
@PropertySource(value = {
"classpath:/application.properties",
"classpath:/environment-${FETTER_ENVIRONMENT}.properties"
})
@EnableJpaRepositories("com.production.repositories")
@EnableTransactionManagement
public class Config {
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USER = "db.user";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
@Resource
Environment environment;
但是我尝试在另一个类中执行它并且它为null。我已尝试使用@Resource
和@Autowired
以及手动注入。
Environment
有什么特别之处可以防止这种情况吗?
@Component
public class Vendor {
private String token;
@Autowired
private Environment environment;
public Vendor() {
//get token from config
//Environment environment = (Environment) ApplicationContextProvider.getApplicationContext().getBean("environment");
setToken(environment.getProperty("api.vendor.token"));
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
更新:我发现this resource突出了@Value
的用法,但我的应用程序中没有使用任何XML配置。
看起来这可能就是我想要的:Loading properties in Spring 3.1 programmatically
答案 0 :(得分:10)
您需要使用@Value注释。但在需要在xml中声明<context:property-placeholder
之前。
有关详细信息,请参阅here。
另外,另一种方式:
@Inject
ApplicationContext context;
......
Enviroment env = context.getEnvironment();
答案 1 :(得分:7)
您可以使用如下所示的弹簧android:layout_marginLeft="-20dp"
注释,但请确保使用@Autowired
或类似注释对您的课程进行注释。
@Component
还要确保您的bean对于扫描是可见的,即它应该在您的案例中的@Autowired
Environment env;
包内。
应该像这样启用组件扫描
com.production
或
<context:component-scan base-package="com.production"/>