【问题标题】:Spring 3: Postpone bean instanciationSpring 3:推迟 bean 实例化
【发布时间】:2020-03-19 16:57:24
【问题描述】:

我有一个使用 JNDI 连接工厂的 bean,如下所示:

<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate" ref="jndiTemplate"/>
    <property name="jndiName" value="SOME_NAME"/>
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">org.ow2.carol.jndi.spi.MultiOrbInitialContextFactory</prop>
            <prop key="java.naming.provider.url">rmi://some_remote_host:1091</prop>
        </props>
    </property>
</bean>

事实上,这个connectionFactory在加载上下文后会尝试连接到远程主机。问题是远程服务应该在上下文加载后启动,上下文加载失败,应用程序部署失败。是否可以将工厂的连接推迟到真正需要连接的时刻?

换句话说,连接工厂的连接是急切的,我希望它是懒惰的。有没有办法通过继承 Factory 和 hacking 来实现这个 appart?

【问题讨论】:

    标签: java spring jndi java-ee-6 spring-jms


    【解决方案1】:

    可以使用lazy-init="true"属性惰性初始化 bean

    来自documentation

    一个惰性初始化的 bean 告诉 IoC 容器创建一个 bean 实例在第一次被请求时,而不是在启动时。

    另请注意,当延迟初始化的 bean 是未延迟初始化的单例 bean 的依赖项时,此行为会发生变化。

    示例配置

    <bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
        <property name="jndiTemplate" ref="jndiTemplate" />
        <property name="jndiName" value="SOME_NAME"/>
    </bean>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2017-04-23
      • 2016-06-08
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多