У меня есть куча бобов Spring, которые взяты из classpath с помощью аннотаций, например
@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {
// Implementation omitted
}
В XML-файле Spring определен 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 не присутствует в XML-файле Spring (он выбирается из пути к классам с помощью аннотаций). Я получил, насколько следующее:
@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
?
PropertyPlaceholderConfigurer
больше не является рекомендуемым классом. Предпочитаю PropertySourcesPlaceholderConfigurer
вместо. В любом случае вы можете использовать более короткое определение XML <context:property-placeholder />
.