Web*_*net 11 java spring dependency-injection properties
我试图从我的应用程序的对象中的.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;
    }
}
更新:我发现这个资源强调了它的用法@Value,但我没有在我的应用程序中使用任何XML配置.
看起来这可能是我正在寻找的:以编程方式在Spring 3.1中加载属性
Mic*_*aev 11
你需要使用@Value annotaion.但在需要<context:property-placeholder在xml中声明之前.
详情请见此处.
另外,另一种方式:
@Inject
ApplicationContext context;
......
Enviroment env = context.getEnvironment();
您可以使用@Autowired如下弹簧注释,但请确保使用@Component或类似的注释您的类.
@Autowired
Environment env;
还要确保您的bean对于扫描是可见的,即它应该com.production在您的情况下在包内.应该像这样启用组件扫描
<context:component-scan base-package="com.production"/>
要么
@ComponentScan(basePackages = {"com.production"} )
| 归档时间: | 
 | 
| 查看次数: | 40893 次 | 
| 最近记录: |