Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SpringUtil模式覆盖应用程序上下文中的Bean设置_Java_Spring - Fatal编程技术网

Java 使用SpringUtil模式覆盖应用程序上下文中的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

第一:是的,我看过

他们告诉我如何创建一个util:list、util:set等等,我明白了

但是,我有一个带有应用程序上下文的库,其中包含一个bean(特别是一个Hibernate会话工厂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>

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>