1

私は現在、CXF Web サービスと Spring @Configurableアノテーションを混在させる問題に直面しています。

一方では、CXF Web サービスが完全に機能し、次のように構成されています。

<import resource="classpath:some-other-context.xml" />

<jaxws:server id="Init"
        serviceClass="package.to.my.ServiceInterface"
        address="/">
        <jaxws:serviceBean>
            <bean class="package.to.my.BADematInitImpl">
            </bean>
        </jaxws:serviceBean>
</jaxws:server>

<context:spring-configured />

そして私のsome-other-context.xmlには、次の Bean を含む私の Spring 構成があります。

@Configurable(autowire = Autowire.BY_TYPE)
public class MyConfigurable {

    @Autowired(required=true)
    private A a;

    @Autowired(required=true)
    private B b;

    @Autowired(required=true)
    private C c;

...

}

しかし、MyConfigurable Bean の新しいインスタンスを自分のサービスに作成しようとすると、null 値の想定される自動配線された A、B、および C オブジェクトが原因でNullPointerExceptionが発生します。

何か案が ?

4

2 に答える 2

1

@ConfigurableAOPは、ロード時の織り込みで使用されるマーカーです。あなたの質問には何も言及されていないので、AOPを使用していないと思います。2 つ目:のデフォルト値であるためrequired=true@Autowired注釈で使用する必要はありません。次のようにコードを変更することをお勧めします。truerequired

これらを spring 構成ファイルの要素に追加します。

<context:component-scan base-package="your.pckg.toscan"/>

ドキュメントには次のように記載されています。

Spring Bean として自動登録されるアノテーション付きコンポーネントのクラスパスをスキャンします。デフォルトでは、Spring が提供する @Component、@Repository、@Service、および @Controller ステレオタイプが検出されます。

<context:annotation-config/>

ドキュメントには次のように記載されています。

Bean クラスで検出されるさまざまなアノテーションをアクティブ化します。Spring の @Required および @Autowired、JSR 250 の @PostConstruct、@PreDestroy および @Resource (利用可能な場合)、JAX-WS の @WebServiceRef (利用可能な場合)、EJB3 の @EJB (利用可能な場合)利用可能)、および JPA の @PersistenceContext および @PersistenceUnit (利用可能な場合)。または、これらのアノテーションに対して個々の BeanPostProcessor をアクティブ化することを選択できます。

したがって、コードを次のように変更します。

@Component
public class MyConfigurable {

    @Autowired
    private A a;

    @Autowired
    private B b;

    @Autowired
    private C c;

...

}

すべてがうまくいくはずです。

于 2013-02-07T08:15:45.273 に答える
0

私はついに問題を発見しました。

この構成をサード パート アプリケーションの XML ファイルに追加する必要がありました。

<context:load-time-weaver/>

...そして、この引数を私のjvm起動コマンドラインに追加します :

-javaagent:"path\to\my\spring-agent.jar"

そして、それは魅力のように機能します。

これは、依存関係が適切に注入されるように、Spring が AOP 部分を管理するエンティティをある時点で必要とするためであることを理解しています。誰かがさらに説明をしてくれたら面白いでしょう。

于 2013-02-07T09:31:27.447 に答える