首先:是的,我见过docs。
他们告诉我如何创建一个util:list,util:set等等。我得到了那个部分。
但是,我有一个带有应用程序上下文的库,其中包含一个bean(特别是一个Hibernate Session Factory bean),其设置我想要覆盖。有几个服务使用这个库,并不是每个服务都需要相同的带注释的类。
会话工厂bean目前看起来像这样:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
<property name="annotatedClasses" >
<list>
<value>com.example.model.Person</value>
<value>com.example.model.Section</value>
</list>
</property>
</bean>
我想用这样定义的列表替换annotatedClasses属性(在使用该库的服务的app环境中):
<util:list id="serviceSpecificAnnotatedClasses">
<value>com.example.model.Person</value>
<value>com.example.model.Section</value>
<value>com.example.model.Location</value>
</util:list>
我是否只需要命名util:list“annotatedClasses”并自动覆盖它?
答案 0 :(得分:1)
不,它不会自动被覆盖。您必须声明bean并默认连接它。
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
<property name="annotatedClasses" ref="annotatedClasses" />
</bean>
<util:list id="annotatedClasses">
<value>com.example.model.Person</value>
<value>com.example.model.Section</value>
<value>com.example.model.Location</value>
</util:list>
没有其他人可以简单地覆盖列表annotatedClasses
。
但为什么不简单地使用property-placeholder指定类并将逗号分隔的列表添加到属性文件中呢?
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
</props>
</property>
<property name="annotatedClasses" value="${service.annotatedClasses}" />
</bean>
假设每个服务都有自己的配置属性文件,他们只需要添加 service.annotatedClasses 的值。