gpt4 book ai didi

java - 设置属性后 Spring 和延迟 Bean Init

转载 作者:行者123 更新时间:2023-11-30 11:35:51 25 4
gpt4 key购买 nike

我有一些代码,其中的属性只在运行时才知道。

在这种情况下,用户可以输入 URL 以及用户名和密码。

ConnectionFactory cf = (ConnectionFactory) this.factory.getBean(
"topicConnectionFactory", <URL which is entered at runtime>)
final UserCredentialsConnectionFactoryAdapter connectionFactory = this.factory
.getBean(UserCredentialsConnectionFactoryAdapter.class);

connectionFactory.setTargetConnectionFactory(cf);

UserCredentialsConnectionFactoryAdapter 没有构造函数基础设置,因此唯一的方法是使用无参数构造函数创建并在之后设置属性,但是 spring 运行 InitializingBean 会抛出 TargetConnectionFactory 错误未设置。

有没有一种方法可以在 spring 创建期间传递此信息,或者让 spring 延迟 Bean 的初始化。

为了理解范围,下面是spring的配置部分。

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"
scope="prototype" />


<bean id="userCredentialsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"
scope="prototype" >
</bean>

<bean id="cachingFactory"
class="org.springframework.jms.connection.CachingConnectionFactory"
scope="prototype" />

<bean id="tibcoTopicConnectionFactory" class="com.tibco.tibjms.TibjmsTopicConnectionFactory"
scope="prototype" />

如前所述,url、用户名和密码直到运行时才知道并且可以更改。该应用程序是多线程的。想法是连接到某个地方,发送消息,断开连接

最佳答案

您可以执行以下操作:

编写您自己的 UserCredentialsConnectionFactoryAdapter 扩展,将 ConnectionFactory 作为构造函数参数:

public class CustomUserCredentialsConnectionFactoryAdapter extends UserCredentialsConnectionFactoryAdapter {

public CustomUserCredentialsConnectionFactoryAdapter(ConnectionFactory target){
super();
setTargetConnectionFactory(target);
}

}

然后像这样使用它:

ConnectionFactory cf = (ConnectionFactory) this.factory.getBean(
"topicConnectionFactory", <URL which is entered at runtime>)
final UserCredentialsConnectionFactoryAdapter connectionFactory = this.factory
.getBean("userCredentialsConnectionFactory", cf);

不要忘记更改您的 bean decaration:

      <bean id="userCredentialsConnectionFactory"
class="com.company.CustomUserCredentialsConnectionFactoryAdapter"
scope="prototype" >
</bean>

关于java - 设置属性后 Spring 和延迟 Bean Init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14873540/

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