使用@Value 注解注入(inject)类的字段和使用 Spring Environment API 查找它们之间是否存在显着差异?一个比另一个更可取(以及在什么情况下)?
使用@Value 的示例:
class Config {
@Value("${db.driverClassName}")
private String driverClassName;
@Value("${db.url}")
private String url;
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Bean
public javax.sql.DataSource dataSource(){
PoolProperties poolProperties = new PoolProperties();
poolProperties.setDriverClassName(driverClassName);
poolProperties.setUrl(url);
poolProperties.setUsername(username);
poolProperties.setPassword(password);
return new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);
}
}
使用环境 API 的示例:
class Config {
@Autowired
private Environment environment;
@Bean
public javax.sql.DataSource dataSource(){
PoolProperties poolProperties = new PoolProperties();
poolProperties.setDriverClassName(environment.getProperty("db.driverClassName"));
poolProperties.setUrl(environment.getProperty("db.url"));
poolProperties.setUsername(environment.getProperty("db.username"));
poolProperties.setPassword(environment.getProperty("db.password"));
return new org.apache.tomcat.jdbc.pool.DataSource(poolProperties);
}
}
最佳答案
Environment
是配置文件和属性的组合。
配置文件是一个命名的、逻辑的 bean 定义组,可以根据您的环境处于事件或非事件状态。可以将 Bean 分配给配置文件,无论是在 XML 中定义还是通过注释定义。例如。您可能有一个用于开发模式的配置文件和另一个用于生产模式的配置文件。您可以查找 @Profile
的文档在这里查看有关它的更多详细信息。
引用 Environment
文档:
The role of the Environment object with relation to profiles is in determining which profiles (if any) are currently active, and which profiles (if any) should be active by default.
除非您需要访问该信息,否则您应该坚持使用带有 ${..}
的占位符符号。格式和 @Value
注释。再次引用 docs :
In most cases, however, application-level beans should not need to interact with the Environment directly but instead may have to have ${...} property values replaced by a property placeholder configurer such as PropertySourcesPlaceholderConfigurer, which itself is EnvironmentAware and as of Spring 3.1 is registered by default when using
<context:property-placeholder/>
.
所以,总结一下:
- 与
Environement
对象,您可以访问与配置文件相关的信息。@Value
无法做到这一点 - 除非您需要与个人资料相关的信息(您可能不需要),否则您应该坚持使用
@Value
注释。
关于spring - @Value 注解和 Environment API 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897314/