gpt4 book ai didi

java - Spring 3 : Postpone bean instanciation

转载 作者:行者123 更新时间:2023-12-02 01:00:13 25 4
gpt4 key购买 nike

我有一个使用 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 就会尝试连接到远程主机。问题在于,远程服务应该在加载上下文后启动,但上下文加载失败,并且应用程序部署失败。是否可以将工厂的连接推迟到真正需要连接的时候?

换句话说,与连接工厂的连接是急切的,而我希望它是惰性的。有没有办法通过子类化工厂并进行修改来实现这个应用程序?

最佳答案

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

来自documentation

A lazy-initialized bean tells the IoC container to create a bean instance when it is first requested, rather than at startup.

另请注意,当延迟初始化 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>

关于java - Spring 3 : Postpone bean instanciation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60761743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com