2017-12-28 17 views
1

AutowiredプロパティSaveProcessorを持つSaveRouteクラスがあります。 このSaveProcessorクラスには@Transactionalアノテーションでアノテーションされたメソッドがあります。アプリケーションを実行しようとすると、Bean SaveProcessorの依存関係インジェクションが失敗したという例外がスローされます。 SaveProcessクラスメソッドから@Transactionalアノテーションを削除すると、正常に動作しています。Spring @私のクラスがオートワイヤーできないようにするトランザクションアノテーション

public class SaveRoute implements RouteBuilder{ @Autowired private SaveProcessor saveProcessor; }

public class SaveProcessor implements Processor{ 

@Override 
public void Process(Exchange exchange){ 
    this.save(); 
} 
@Transactional 
public void Save(){ 

}} 

It would be great if someone could help me on this. @Transactional making SaveProcessor class not a candidate for autowiring. 
+1

の可能性のある重複している(HTTPS [トランザクションクラスにautowireする方法を?]://のstackoverflowを。com/questions/33240700/how-to-autowire-on-transaction-class) – tsolakp

+0

より多くのコンテキストを提供する必要があります。どのようにSpring AOPを起動していますか?あなたはBootを使っていますか?あなたのビルドの依存関係はどうなっていますか? – chrylis

+0

@ tsolakpの複製は問題をはっきりと説明していますが、日付がついていますので、まだこれを無効にするつもりはありません。 – chrylis

答えて

-1

ようなものをオートワイヤリングするときは、代わりにSaveProcessor具体的なクラスのProcessorインタフェースを使用する必要があります。

@Autowired 
private Processor saveProcessor; 
+0

これは唯一の解決策ではありません。代わりに、CGLIBを使用することもできます。 – tsolakp

+0

私のアプリケーションでは、プロセッサインタフェースが異なる実装を持っているため、プロセッサインタフェースは使用できません。 –

+0

が@ @ Qualifierのアノテーションよりも助けてください – andrii

0

私は解決策を見つけ出すことができました。私SaveProcessorクラスの上に 追加

@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS)

は私の問題を解決しました。

私は

@Autowire 公共プロセッサSaveProcessorを使用することはできません。

これは、私のアプリケーションにProcessorのマルチプル実装が存在するためです。

+0

複数の実装を使っているなら '@ Qualifire'を使うことができます。あなたがautowiring(インターフェイスベースのプロキシを使用)のためのインターフェイスを使用している場合は良いが、クラスベースのautowiringを使用している場合は、クラスも同様にスプリングコンポーネントでなければなりません。つまり、あなたのクラスには '@ Component'や' @Service'や '@Repository'のいずれかでアノテーションを付ける必要があります。 –

0

あなたSaveProcessorオブジェクトの春のメイクプロキシ、 があるため

あなたは

を設定@Transactional

、インターフェースによってautowireすることをお勧めし Spring @Transactional annotation making my class not able to Autowire答え、 に同意しますそれは プロセッサを実装します。 DynamicProxyを使用します。 ので、あなたがコンテキストでクラス SaveProcessorと豆を持っていない、あなたはcalss プロキシ$と豆を持っている...はintarface プロセッサを実装WICH。

これは、springが候補を見つけることができない理由です。あなたはプロセッサ、複数の実装を持っている場合

それは はただのbeanNameによって

@Qualifier

、またはオートワイヤリングを使用する問題ではありません。あなたのケース

@Autowired 
private Processor saveProcessor; 

が仕事になるには、豆beacause名saveProcessor

関連する問題