SpringのAspectJをCGLIBプロキシで使用しています。私は以下のように定義された側面を持っています。そこでは、アノテーション'ValidatorMethod'でアノテーションが付けられた具象クラスのパブリックメソッドにアドバイスしたいと思います。
@Aspect
public class ServiceValidatorAspect {
@Pointcut("within(@com.example.ValidatorMethod *)")
public void methodsAnnotatedWithValidated() {
}
@AfterReturning(
pointcut = "methodsAnnotatedWithValidated()",
returning = "result")
public void throwExceptionIfErrorExists(JoinPoint joinPoint, Object result) {
...
}
サービスインターフェイスの例
public interface UserService {
UserDto createUser(UserDto userDto);
}
サービス実装の例
public class UserServiceImpl implements UserService {
public UserDto createUser(UserDto userDto) {
validateUser(userDto);
userDao.create(userDto);
}
@ValidatorMethod
public void validateUser(UserDto userDto) {
// code here
}
}
AOPスプリング構成:
<aop:aspectj-autoproxy proxy-target-class="true"/>
私が理解しているように、proxy-target-class
「true」に設定すると、インターフェイスメソッドだけでなく、具象クラスのパブリックメソッドがプロキシされます。しかし、私のアスペクトはトリガーされません。何が悪いのかについて何か考えはありますか?デバッガーのコールスタックで確認できるため、UserServiceImplクラスがCGLIBによって正しくプロキシされていることがわかります。