@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/>

因此,总结一下:

  1. 使用该Environement对象,您可以访问与配置文件有关的信息。你不能这样做@Value
  2. 除非您需要与配置文件相关的信息(并且您可能不需要),否则应坚持使用@Value注释。

以上是 @Value注释和环境API之间的区别? 的全部内容, 来源链接: utcz.com/qa/419846.html

回到顶部