Java 使用SpringUtil模式覆盖应用程序上下文中的Bean设置
第一:是的,我看过 他们告诉我如何创建一个util:list、util:set等等,我明白了 但是,我有一个带有应用程序上下文的库,其中包含一个bean(特别是一个Hibernate会话工厂bean),设置为我希望覆盖的选项。有几个服务使用这个库,但不是每个服务都需要相同的注释类 会话工厂bean当前看起来如下所示:Java 使用SpringUtil模式覆盖应用程序上下文中的Bean设置,java,spring,Java,Spring,第一:是的,我看过 他们告诉我如何创建一个util:list、util:set等等,我明白了 但是,我有一个带有应用程序上下文的库,其中包含一个bean(特别是一个Hibernate会话工厂bean),设置为我希望覆盖的选项。有几个服务使用这个库,但不是每个服务都需要相同的注释类 会话工厂bean当前看起来如下所示: <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFac
<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>
org.hibernate.dial.h2方言
真的
真的
com.example.model.Person
com.example.model.Section
我想用如下定义的列表替换AnnotatedClass属性(在使用库的服务的应用程序上下文中):
com.example.model.Person
com.example.model.Section
com.example.model.Location
我是否只需要将util:list命名为“AnnotatedClass”,它就会被自动覆盖?否,它不会被自动覆盖。默认情况下,您必须声明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>
假设每个服务都有自己的属性文件用于配置,他们只需为服务添加值。AnnotatedClass,以澄清:无法在服务的应用程序上下文中声明util:列表,但是相反,服务必须用我想要的值列表声明它自己的会话工厂bean?必须是我,但我没有得到这个评论,为什么服务需要再次声明sessionfactory?被引用的库很大,但每个服务只使用库中定义的一些实体。其想法是在每个服务中放置一个参数,以覆盖(甚至设置)在库应用程序上下文的SessionFactory bean中定义的会话工厂的“AnnotatedClass”属性。。。只需定义2个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" 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>
<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>