1

Spring-boot を使用してマルチモジュール Maven アプリケーションを作成しています。1 つのモジュールにサービス層があり、別のモジュールに Web 層があります。次のエラーが発生して、アプリケーションを起動できません。

The bean 'Service' could not be injected as a 'Service' because it is a JDK dynamic proxy that implements:


Action:

Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.

構成クラスに注釈を付けてみました

@EnableAsync(proxy-target-class=true)
@EnableCaching(proxy-target-class=true)
@EnableTransactionManagement(proxy-target-class=true)
@EnableAspectJAutoProxy(proxy-target-class=true)

タイプ @PreAuthorize または @Transactional の注釈を追加するとすぐに、アプリケーションは動作を停止します。

このサービスはインターフェイスを実装していません。Spring で自動配線に CGLib プロキシを使用したいのですが、トレース ログから次のように表示されます。

* Adding transactional method 'Service.remove' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
* Creating implicit proxy for bean 'Service' with 0 common interceptors and 3 specific interceptors.
* Creating CGLIB proxy: SingletonTargetSource for target object [Service@17765082]
* Adding transactional method 'Service$$EnhancerBySpringCGLIB$$6f15732.remove' with attribute: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
* Creating implicit proxy for bean 'Service' with 0 common interceptors and 2 specific interceptors
* Creating JDK dynamic proxy: SingletonTargetSource for target object [Service$$EnhancerBySpringCGLIB$$6f15732@32142479]

自動配線の例外は次のとおりです。

Bean named 'locationService' is expected to be of type 'Service' but was actually of type 'com.sun.proxy.$Proxy202'

これは、Spring が私のサービスを CGLib プロキシと JDK プロキシの両方として登録していることを意味しますか? その場合、CGLib プロキシのみを使用するように強制するにはどうすればよいですか?

4

1 に答える 1