4

struts2.2とspring3.1を使用したアプリがあり、SpringAutowireを無効にしたい。少しググってみたら、<beans>タブに入れdefault-autowire="no"ないといけないのですが、うまくいかないようです。

それから私はこの<bean>ようにすべてのタグに対してこれを宣言できることを知っています:<bean autowire="no">、しかしこれもうまくいかないようです。

春のデバッグロガーを有効にすると、次のようなメッセージがたくさん表示されます。

情報:デバッグ[http-thread-pool-8080(3)](ConstructorResolver.java:739)-Bean名「com.common.actions.PopupAction」からコンストラクターを介した「intermedService」という名前のBeanへのタイプによる自動配線

そして、applicationConfig.xmlの対応するエントリは次のとおりです。

<beans default-autowire="no" 
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<bean id="PopupAction" scope="prototype" class="com.common.actions.PopupAction" autowire="no">
        <constructor-arg type="com.common.services.abs.iIntermedService" ref="intermedService"/>
        <constructor-arg type="com.common.services.abs.iLocationService" ref="locationService"/>
        <constructor-arg type="com.common.services.abs.iUserService" ref="userService"/>
        <constructor-arg type="com.common.services.abs.iPhoneService" ref="phoneService"/>
    </bean>

ここで依存関係を手動で定義し、定義している限り、Springがこのアクションを自動配線しようとするのはなぜauto-wire="no"ですか?

または、このメッセージは、配線がコンストラクターを介してタイプごとに行われたことを示しています(私が望むように)。「タイプ別の自動配線」は、4つのパラメーターからintermedServiceをタイプ別の変数intermedサービスと一致させたことを意味します(順序などではありません) ?

4

3 に答える 3

5

Struts 2 Springプラグインは、デフォルトで自動配線を「名前」に設定します。現在、プラグインが値として「none」を許可しているとは思いませんが、「auto」を使用してみることができます。これはまだ自動配線Beanファクトリであるため、役に立たないと思います。

これは以前に提起されました。私は本当の解決策を思い出しません。いくつかの重要なクリーンアップを行う次のリリースで対処できるかどうかを確認するために、もう一度取り上げました。

編集デフォルトで;になるstruts.objectFactory.spring.autoWire.alwaysRespect定数もあります。falseに設定してみてくださいtrue。ブール値のどの意味がどちらを意味するのか、またはそれが効果を持っているかどうかを思い出せません。

于 2011-12-07T22:13:17.520 に答える
1

それを回避する方法(修正されるまで)は、フィールド/コンストラクター引数とBeanに異なる名前を付けるだけで、Springがそれらと一致しないようにすることです。

于 2011-12-08T06:56:15.427 に答える
0

default-autowire="no"がデフォルトで有効になっていると思います。つまり、default-autowireを指定しない場合は、default-autowire="no"を意味します。このBeanを自動配線したくない場合は、autowire-candidate="false"を設定してみてくださいhttp://static.springsource.org/spring/docs/2.5.x/reference/beans.html

于 2011-12-08T05:44:14.563 に答える