4

Spring Integration でサポートされている Web アプリケーションを開発しています。1.0.4.RELEASE を使用しています。私はCGLibプロキシを使用しています。トランザクション メッセージ エンドポイントがあります。すべてが正しく機能しましたが、注釈を少し試してみました。私は正常に動作するannotation-configを使用しています。service-activator 構成を xml から注釈に切り替えることから始めましたが、失敗しました。

次の構成は正しく機能しました。

spring-integration.xml

<channel id="inChannel" />
<channel id="outChannel" />
<service-activator method="myMethod" input-channel="inChannel" ref="myService" output-channel="outChannel" />

MyService.java

@MessageEndpoint
@Transactional
public class MyService {

   @Autowired
   private MyDao myDao;

   public MyObject myMethod(String message) throws Exception {
      ...
   }

}

注釈を使用してまったく同じ機能を実現しようとしています (私は CGLIB を使用しているため、インターフェイスは必要ありませんが、デフォルトのコンストラクターは必要ありません)。

  • .xml から service-activator を削除しました
  • 変更された MyService:

MyService.java を変更しました

@MessageEndpoint
@Transactional
public class MyService {

   @Autowired
   private MyDao myDao;

   public MyService () {
   }

   @ServiceActivator(inputChannel="inChannel", outputChannel="outChannel")
   public MyObject myMethod(String message) throws Exception {
      ...
   }

}

次のエラーが発生します: java.lang.IllegalArgumentException: スーパークラスには null コンストラクターがありませんが、引数が指定されていません

次のエラー記事について説明しているスレッドを多数見てきましたが、問題はカスタム クラスに関するものでした。私の問題はSpringクラスに関するものです。

Error creating bean with name 'myService'
nested exception is org.springframework.aop.framework.AopConfigException
Could not generate CGLIB subclass of class [class org.springframework.integration.handler.ServiceActivatingHandler]
java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given

どうしたの?Spring が MyService だけでなく、Spring クラスのプロキシを作成しようとするのはなぜですか? 私のクラスは何らかの方法でラップされていますか? 何が起こっているのかわかりません。大変助かります。

4

2 に答える 2

2

@Autowiredタグを外してみてください。そのフィールドにデータを入力するために、コンストラクターまたはセッター メソッドを探します。どちらも持っていないことを考えると、それが問題かもしれません。推測ですが。

于 2012-06-26T16:16:51.397 に答える
1

または、myDao パッケージで保護または公開することができます (Spring が実際に自動配線できるように)

例えば:

@Autowired
myDao
于 2013-09-26T23:42:14.063 に答える