使用Spring或AspectJ将基于代码的样式转换为基于注释的样式AOP

时间:2016-05-02 04:25:09

标签: java aop aspectj spring-aop

我有以下基于代码的样式方面,它在代码中查找字段级注释,并使用该字段作为参数调用方法。这就是它的样子..

cover

上面的方法工作正常,但我想将它转换为基于Spring或AspectJ的Annotation,类似于此。发现AspectJ文档有点令人困惑,任何提示都会有所帮助..

public aspect EncryptFieldAspect
{
    pointcut encryptStringMethod(Object o, String inString):
        call(@Encrypt * *(String))
        && target(o)
        && args(inString)
        && !within(EncryptFieldAspect);

    void around(Object o, String inString) : encryptStringMethod(o, inString) {
        proceed(o, FakeEncrypt.Encrypt(inString));
        return;
    }
}

1 个答案:

答案 0 :(得分:1)

不确定您正在阅读哪些文档 - https://eclipse.org/aspectj/doc/next/adk15notebook/ataspectj-pcadvice.html上的页面向您展示了如何从代码转换为注释样式。我承认它们不像它们那样全面。

基本上:

  • 从aspect关键字切换到@Aspect
  • 将您的切入点移动到方法
  • 上指定的字符串@Pointcut注释
  • 将您的建议从未命名的块转换为方法。 (由于要继续进行论证,这对于建议来说可能会变得棘手)

您的原件变得像:

@Aspect
public class EncryptFieldAspect
{
    @Pointcut("call(@need.to.fully.qualify.Encrypt * *(java.lang.String)) && target(o) && args(inString) && !within(need.to.fully.qualify.EncryptFieldAspect)");
    void encryptStringMethod(Object o, String inString) {}

    @Around("encryptStringMethod(o,inString)")
    void myAdvice(Object o, String inString, ProceedingJoinPoint thisJoinPoint) {
        thisJoinPoint.proceed(new Object[]{o, FakeEncrypt.Encrypt(inString)});
    }
}