首先:是的,我见过 docs .
他们告诉我如何创建 util:list、util:set 等。我明白了。
但是,我有一个带有应用程序上下文的库,其中包含一个 bean(特别是 Hibernate Session Factory bean)以及我想要覆盖的设置。有多个服务使用此库,但并非每个服务都需要相同的带注释的类。
session 工厂 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 属性(在使用该库的服务的应用程序上下文中):
<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”,它就会被自动覆盖?
最佳答案
不,它不会自动被覆盖。默认情况下,您必须声明 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
。
但是为什么不简单地使用属性占位符来指定类并将逗号分隔列表添加到属性文件中呢?
<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 的值即可。
关于java - 使用 Spring Util Schema 覆盖应用程序上下文中的 Bean 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18739958/