如何在没有属性文件的情况下使用Spring的@Value?

时间:2016-06-20 13:37:34

标签: java spring properties-file

我目前有以下代码:

if

我不喜欢这个,并希望用Spring替代它。所以,我认为我应该使用else{ //you already have a pre created View holder. Retrieve it. viewHOlder=(ViewHolder)convertView.getTag(); //now you can get access to your View elements easily } 注释。我不想为此拥有属性文件。但是,我希望通过注释获得默认值。

有没有办法在没有属性文件的情况下执行此操作,正确的代码实现是什么?我还需要int port = System.getProperty("port") != null ? Integer.parseInt(System.getProperty("port")) : 8080; 吗?你能告诉我一个如何做到这一点的工作实例吗?

3 个答案:

答案 0 :(得分:4)

假设您使用的是基于java的配置。

@Bean
public static PropertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

然后使用@Value

注释一个字段
@Value("${port:8080}")
private int port;

这将检查给定属性port的系统属性和环境。当启用JNDI时,将检查它并且当具有基于servlet的环境时,您也可以将其作为servlet变量。

使用PropertySourcesPlaceholderConfigurer并不需要PropertySource所需的属性文件,这些文件有多种不同的实现方式。

如果您不想注册PropertySourcesPlaceholderConfigurer,您可以恢复为SpEL,但这会使它更复杂(并且丑陋的imho)。

答案 1 :(得分:1)

我没试过,但你可以使用任何SpEL expression。您的代码可以重写为:

@Value("#{systemProperties['port'] ?: 8080}")
private int port;

请注意,我使用的是safe navigation operator

关于PropertySourcesPalceholderConfigurer,我觉得你不需要一个,因为你的类路径中有Spring表达式语言依赖项:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>4.2.3.RELEASE</version>
</dependency>

答案 2 :(得分:1)

经过测试和工作。

  1. 是的,您需要ptr=(char *)1; ,但它不需要属性文件
  2. 像这样引用您的系统变量:{​​{1}}
  3. 代码示例:

    PropertyPlaceholderConfigurer

    配置:

    @Value("#{systemEnvironment['YOUR_VARIABLE_NAME'] ?: 'DEFAULT_VALUE'}"

    运行所有样本:

    package abc;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class Test {
    
        public final String javaPath;
    
        @Autowired
        public Test(@Value("#{systemEnvironment['Path']}") String javaPath) {
            this.javaPath = javaPath;
        }
    }
    

    希望它有所帮助。