2

プロパティが実行時にのみ認識されるコードがいくつかあります。

この場合、ユーザーは 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 が設定されていないというエラーをスローします。

春の作成中にこの情報を渡す方法、または春の遅延のためにBeanの初期化を行う方法はありますか。

範囲を理解するために、以下はスプリングの構成のセクションです。

<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、ユーザー名、およびパスワードは実行時まで不明であり、変更される可能性があります。アプリケーションはマルチスレッドです。アイデアは、どこかに接続し、メッセージを送信し、切断することです

4

1 に答える 1

1

次のことができます。

をコンストラクタ引数として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 宣言を変更することを忘れないでください。

      <bean id="userCredentialsConnectionFactory"
       class="com.company.CustomUserCredentialsConnectionFactoryAdapter"
scope="prototype" >
    </bean>
于 2013-02-14T12:27:10.583 に答える