@TargetSE(valueSE=TYPESE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE @RepeatableSE(valueSE=PropertySources.class) public @interface PropertySource
PropertySource を Spring の Environment に追加するための便利で宣言的なメカニズムを提供するアノテーション。@Configuration クラスと組み合わせて使用します。 キー / 値ペア testbean.name=myTestBean を含むファイル app.properties を指定すると、次の @Configuration クラスは @PropertySource を使用して app.properties を Environment の PropertySources のセットに提供します。
 @Configuration
 @PropertySource("classpath:/com/myco/app.properties")
 public class AppConfig {
     @Autowired
     Environment env;
     @Bean
     public TestBean testBean() {
         TestBean testBean = new TestBean();
         testBean.setName(env.getProperty("testbean.name"));
         return testBean;
     }
 }Environment オブジェクトは構成クラスに @Autowired として追加され、TestBean オブジェクトを設定するときに使用されることに注意してください。上記の構成では、testBean.getName() を呼び出すと "myTestBean" が返されます。
<bean> および @Value アノテーションの ${...} プレースホルダーの解決 PropertySource のプロパティを使用して <bean> 定義または @Value アノテーションの ${...} プレースホルダーを解決するには、適切なエンベディッドバリューリゾルバーが ApplicationContext で使用される BeanFactory に登録されていることを確認する必要があります。これは、XML で <context:property-placeholder> を使用すると自動的に発生します。@Configuration クラスを使用する場合、これは、static @Bean メソッドを介して PropertySourcesPlaceholderConfigurer を明示的に登録することで実現できます。ただし、static @Bean メソッドを介した PropertySourcesPlaceholderConfigurer の明示的な登録は、通常、プレースホルダー構文などの設定をカスタマイズする必要がある場合にのみ必要であることに注意してください。@Configuration の javadoc の「外部化された値の操作」セクションおよび「 詳細と例については、@Bean の javadoc の「 @Bean メソッドを返す BeanFactoryPostProcessor」に関する注記を参照してください。
@PropertySource リソースロケーション内の ${...} プレースホルダーの解決 @PropertySource  リソースの場所に存在する ${...} プレースホルダーは、環境に対してすでに登録されているプロパティソースのセットに対して解決されます。例:
 @Configuration
 @PropertySource("classpath:/com/${my.placeholder:default/path}/app.properties")
 public class AppConfig {
     @Autowired
     Environment env;
     @Bean
     public TestBean testBean() {
         TestBean testBean = new TestBean();
         testBean.setName(env.getProperty("testbean.name"));
         return testBean;
     }
 }"my.placeholder" がすでに登録されているプロパティソースの 1 つに存在すると仮定します。システムプロパティまたは環境変数の場合、プレースホルダーは対応する値に解決されます。そうでない場合は、"default/path" がデフォルトとして使用されます。デフォルト値(コロン ":" で区切られる)の表現はオプションです。デフォルトが指定されておらず、プロパティを解決できない場合、IllegalArgumentException がスローされます。
 特定のプロパティキーが複数の .properties ファイルに存在する場合、最後に処理された @PropertySource アノテーションが「勝ち」、オーバーライドします。
 例: 2 つのプロパティファイル a.properties および b.properties が与えられた場合、@PropertySource アノテーションで参照する次の 2 つの構成クラスを検討してください。
 @Configuration
 @PropertySource("classpath:/com/myco/a.properties")
 public class ConfigA { }
 @Configuration
 @PropertySource("classpath:/com/myco/b.properties")
 public class ConfigB { }
 オーバーライドの順序は、これらのクラスがアプリケーションコンテキストに登録される順序によって異なります。
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ConfigA.class); ctx.register(ConfigB.class); ctx.refresh();
 上記のシナリオでは、ConfigB が最後に登録されたため、b.properties のプロパティは a.properties に存在する重複をオーバーライドします。
 特定の状況では、@PropertySource アノテーションを使用する場合、プロパティソースの順序を厳密に制御することが不可能または実用的でない場合があります。例: 上記の @Configuration クラスがコンポーネントスキャンを介して登録された場合、順序を予測することは困難です。このような場合、およびオーバーライドが重要な場合、ユーザーはプログラムによる PropertySource API の使用にフォールバックすることをお勧めします。詳細については、ConfigurableEnvironment および MutablePropertySources javadoc を参照してください。
 注: このアノテーションは、Java 8 規則に従って再現可能です。ただし、このような @PropertySource アノテーションはすべて、同じレベルで宣言する必要があります。構成クラスで直接宣言するか、同じカスタムアノテーション内のメタアノテーションとして宣言する必要があります。直接アノテーションがメタアノテーションを効果的にオーバーライドするため、直接アノテーションとメタアノテーションの混合は推奨されません。
PropertySources, Configuration, PropertySource, ConfigurableEnvironment.getPropertySources(), MutablePropertySources| 修飾子と型 | オプションの要素と説明 | 
|---|---|
| StringSE | encoding 指定されたリソースの特定の文字エンコーディング。 | 
| ClassSE<? extends PropertySourceFactory> | factory カスタム  PropertySourceFactoryを指定します(ある場合)。 | 
| boolean | ignoreResourceNotFoundproperty resourceの検出の失敗を無視する必要があるかどうかを示します。 | 
| StringSE | name このプロパティソースの名前を示します。 | 
public abstract StringSE[] value
 従来のプロパティファイル形式と XML ベースのプロパティファイル形式の両方がサポートされています。— たとえば、"classpath:/com/myco/app.properties" または "file:/path/to/file.xml"。
 リソースの場所のワイルドカード(例: ** /*.properties) は許可されていません。各場所は、正確に 1 つの .properties リソースに評価される必要があります。
${...} プレースホルダーは、Environment にすでに登録されているすべてのプロパティソースに対して解決されます。例については、上記を参照してください。
 各場所は、独自のプロパティソースとして、宣言された順序で、包含 Environment に追加されます。
public abstract StringSE name
factory() は基になるリソースに基づいて名前を生成します(DefaultPropertySourceFactory の場合: 対応する名前のない ResourcePropertySource コンストラクターを介してリソースの説明から派生)。public abstract boolean ignoreResourceNotFound
property resource の検出の失敗を無視する必要があるかどうかを示します。 プロパティファイルが完全にオプションである場合、true が適切です。デフォルトは false です。
public abstract StringSE encoding
public abstract ClassSE<? extends PropertySourceFactory> factory
PropertySourceFactory を指定します(ある場合)。デフォルトでは、標準リソースファイルのデフォルトファクトリが使用されます。
DefaultPropertySourceFactory, ResourcePropertySource