0

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によって正しくプロキシされていることがわかります。

4

1 に答える 1

0

問題はこれのようです(ここから取得):

アスペクトは、操作中の呼び出しには適用されません。つまり、同じ「プロキシ化された」Bean の別のメソッドから発信されたメソッドの呼び出しをプロキシがインターセプトする方法はありません。

于 2013-03-01T02:47:43.643 に答える