1. ホーム

[解決済み] [Solved] アノテーションを使用して構成されたSpring Beanにプロパティ値を注入するにはどうすればよいですか?

2022-03-29 15:59:34

質問

私は、アノテーションを介してクラスパスからピックアップされたSpring Beanの束を持っている、例えば、。

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {
    // Implementation omitted
}

SpringのXMLファイルには PropertyPlaceholderConfigurer が定義されています。

<bean id="propertyConfigurer" 
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/app.properties" />
</bean> 

app.properitesのプロパティの1つを、上記のビーンに注入したいのです。私は単に次のようなことを行うことはできません。

<bean class="com.example.PersonDaoImpl">
    <property name="maxResults" value="${results.max}"/>
</bean>

PersonDaoImplはSpring XMLファイルには存在しないため(アノテーションでクラスパスから拾ってくる)。というところまではできました。

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {

    @Resource(name = "propertyConfigurer")
    protected void setProperties(PropertyPlaceholderConfigurer ppc) {
    // Now how do I access results.max? 
    }
}

しかし、私が興味を持っているプロパティに、どうやって ppc ?

解決方法は?

Spring 3ではELのサポートを使って行うことができます。例を挙げます。

@Value("#{systemProperties.databaseName}")
public void setDatabaseName(String dbName) { ... }

@Value("#{strategyBean.databaseKeyGenerator}")
public void setKeyGenerator(KeyGenerator kg) { ... }

systemProperties は暗黙のオブジェクトであり strategyBean はビーン名です。

もう1つ例を挙げると、これはプロパティを Properties オブジェクトを作成します。また @Value をフィールドに追加します。

@Value("#{myProperties['github.oauth.clientId']}")
private String githubOauthClientId;

以下は ブログ記事 このことについて書いたので、もう少し詳しく。