java – 如何注入一个属性值到使用注释配置的Spring Bean?

我有一堆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注入上面显示的bean。我不能简单地做一些事情

<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是一个bean名称。

另一个例子,当你想从一个Properties对象中获取一个属性时。它还显示,您可以应用@Value字段:

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

这里是一个blog post我写了一个更多的信息。

http://stackoverflow.com/questions/317687/how-can-i-inject-a-property-value-into-a-spring-bean-which-was-configured-using

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 如何注入一个属性值到使用注释配置的Spring Bean?