java - 使用 Spring Util Schema 覆盖应用程序上下文中的 Bean 设置

标签 java spring

首先:是的,我见过 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/

相关文章:

java - Spring 安全: isAuthenticated using Ajax

java - 从属性文件加载 xml

java - Android 应用程序 Activity 中的广告横幅实现

java - 从 Swing GUI 中打开新的条形图窗口 (JavaFX)

java - Selenium Webdriver 中的前端数据验证

java - Maven 项目中缺少 servlet-api

java - 如何获取jdbcTemplate当前使用的Connection对象

java - Spring 安全中每个请求的不同 csrf token

java - 如何使用 SqlAlchemmy 从 sqlite 数据库中选择不同的值

java - Android Constraint Layout - 将一个ImageView移动到另一个ImageView