web-dev-qa-db-ja.com

トランザクションアノテーションエラー

Serviceクラスに「@Transactional(readOnly=false)」アノテーションを追加すると、次のエラーが発生します

説明:

Bean 'studentService'は、次を実装するJDK動的プロキシであるため、 'com.student.service.StudentServiceImpl'として注入できませんでした。com.student.service.StudentService

サンプルコード:

@Service("studentService")
@Transactional(readOnly=false)
public class StudentServiceImpl implements StudentService {

}

public interface StudentService {

}

アクション:

proxyTargetClass=trueおよび/または@EnableAsync@EnableCachingを設定して、Beanをそのインターフェースの1つとして挿入するか、CGLibベースのプロキシの使用を強制することを検討してください。

プロセスは終了コード1で終了しました

これは何が原因ですか?

14
syv

春のブートプロジェクトでは、追加してみてください:

spring.aop.proxy-target-class=true

あなたのapplication.propertiesに

[〜#〜]または[〜#〜]

@EnableAspectJAutoProxy(proxyTargetClass = true)

スプリングブートエントリポイントへ。

16
mtbadi39

SOコメントで既に述べたように、インターフェイスの代わりに実装クラスを挿入/自動配線しようとするとエラーが発生します。

Bean 'studentService'は、com.student.service.StudentServiceを実装するJDK動的プロキシであるため、 'com.student.service.StudentServiceImpl'として注入できませんでした。

SOが投稿したセットアップで、

public class StudentServiceImpl implements StudentService {
}

public interface StudentService {
}

以下のようにインターフェースを自動配線した場合、エラーは発生しません。

@Autowired //or @Inject
StudentService studentService;
16
gtiwari333