2013-10-31 99 views
2

在Spring中使用@PropertySource有什么好处?使用Spring PropertySource的优点是什么?


给定的配置...

@Configuration 
@PropertySource("classpath:foo.properties") 
public class Config {} 

...我们可以访问Environment

public class Foo { 
     @Autowire Environment env; 

     public void bar() { 
     String foo = env.getProperty("foo"); 
     } 
} 

这我们已经可以做定期已有系统属性。即使档管理系统很容易与系统性能

if (profile1) System.setProperty("foo", "bar") 
else   System.setProperty("foo", "baz"); 

...和

System.getProperty("foo"); // also shorter than autowiring an environment 

Plus系统性能没有一些@PropertySource

  • 系统属性中的不足之处是可迭代,PropertySource不是
  • PropertySource不允许回退属性 - 和creati自定义PropertySource至少等于系统属性的代码。
  • Environment@Autowire增加弹簧联轴器

回答

1

从属性文件中读取值远远优于在类文件中对它们进行硬编码。如果你硬编码,那么你需要重新编译,如果你想改变它们中的任何一个。

要回答你的批评:

1.

系统属性是可迭代的,PropertySource不

大多数PropertySources延伸EnumerablePropertySource。虽然我不能确定用例的,你会想遍历你的属性

2.

PropertySource不允许回退性质 - 并创建自定义的 PropertySource至少等于做的代码与 系统属性相同。

您可以使用标准弹簧属性获取器,而不是隐藏自定义属性源中的回退。例如

env.getProperty("someProp", "someFallback") 

甚至

env.getProperty("someProp", env.getProperty("someFallback", "lastResort")) 

3.

环境和@Autowire增加弹簧联轴器

这是自动装配,让弹簧联轴器,而你不知道如果你不想要,不需要使用它。例如

public class Foo { 
    private final String foo; 

    public Foo(String foo) { 
     this.foo = foo; 
    } 

    public void bar() { 
     // doo something with foo 
    } 
} 

@Configuration 
@PropertySource("classpath:foo.properties") 
public class Config { 
    @Autowired 
    public Environment env; 

    @Bean 
    public Foo foo() { 
     return new Foo(env.getProperty("foo")); 
    } 
} 
3
  1. 你可以给用户提供键/值对属性文件将被注入到您的环境。如果您拥有大量的环境属性,这使得它更容易一点。你也可以指定多个文件。
  2. 假设是你会事先知道属性(在使用它之前)。因此,一个关键值对是有意义的。
  3. 您有弹簧活动配置文件概念来管理配置文件。这比通过系统属性自己做起来要容易得多。
相关问题