@Value注释和环境API之间的区别?
在使用@Value注释注入类的字段和使用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
文档:
与配置文件相关的环境对象的作用是确定当前哪些配置文件(如果有)处于活动状态,以及默认情况下哪些配置文件(如果有)应处于活动状态。
除非您需要访问该信息,否则应坚持使用带${..}
格式和@Value
注释的占位符。再次,引用文档:
但是,在大多数情况下,应用程序级Bean不必直接与环境交互,而必须将$
{…}属性值替换为属性占位符配置程序,例如PropertySourcesPlaceholderConfigurer,该属性本身是EnvironmentAware,自使用时,Spring
3.1默认注册
<context:property-placeholder/>
。
因此,总结一下:
- 使用该
Environement
对象,您可以访问与配置文件有关的信息。你不能这样做@Value
- 除非您需要与配置文件相关的信息(并且您可能不需要),否则应坚持使用
@Value
注释。
以上是 @Value注释和环境API之间的区别? 的全部内容, 来源链接: utcz.com/qa/419846.html