代码之家  ›  专栏  ›  技术社区  ›  harsrawa

spring:在创建任何bean之前初始化属性

  •  1
  • harsrawa  · 技术社区  · 6 年前

    我的项目结构如下-

    门面->服务->dao

    在dao层中,当bean初始化时,会从属性文件中注入许多依赖项。因此,必须先读取属性文件,然后创建剩余的dao bean。当应用程序启动时,它会给出一个错误,即spring无法解析占位符。

    dao-application-context.xml类似于-

    <bean 
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    
        <property name="prop">
            <value>app.properties</value>
        </property>
    </bean>
    
    <import resource = "a-dao.xml" />
    <import resource = "b-dao.xml" />
    <import resource = "c-dao.xml" />
    

    现在,在所有子应用程序上下文中,即a-dao等,我们都有-

    <bean ....>
      <property name = "xyz">
        <value>${appValue}<value/>
      </property>
    <bean>
    

    收到的错误是无法解析appvalue。我认为这可能是由于创建bean的顺序不正确造成的。但是,相同的配置在另一个更大的项目中工作。

    我查过了 Order of Spring Bean Initialization 但实施这一解决方案是不可行的。还有别的办法吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   resatz    6 年前

    注册此配置块,属性 支柱 似乎是错的

    <bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    
    <property name="prop">
        <value>app.properties</value>
    </property>
    </bean>
    

    根据 Spring documentation 你可以用这房子 位置 位置 设置属性文件的一个或多个值。

    所以代码应该重构为

    <bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>app.properties</value>
    </property>
    </bean>