切入点表达式'abc(inString)'包含不受支持的切入点原语'call'

时间:2015-07-14 20:08:09

标签: java spring annotations aspectj spring-aop

我是Spring-aop概念的新手。

我在编译期间收到此错误。

  

org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException:   切入点表达式'abc(inString)'包含不受支持的切入点   原始的'呼叫'

我的方面是,

@Aspect
@Component
public class BeforeAdvice {

      @Pointcut(value="call(@com.app.test.EncryptDemo * *(String)) && args(inString) && !within(com.app.test.BeforeAdvice)",argNames="inString")
      public void abc(String inString) {};

      @Around(value = "abc(inString)",argNames="inString")
      public Object ourAroundAdvice(ProceedingJoinPoint pjp, String inString) throws Throwable {

          System.out.println("in around");
          return null;
      }
  }

我的自定义注释

@Documented
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptDemo {

}

我的实体

@Entity
@Table(name="customer")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Customer {

    @Id
    @GeneratedValue
    private Long id;

    private String somethingPublic;

    private String somethingPrivate;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getSomethingPublic() {
        return somethingPublic;
    }

    public void setSomethingPublic(String somethingPublic) {
        this.somethingPublic = somethingPublic;
    }

    public String getSomethingPrivate() {
        return somethingPrivate;
    }

    @EncryptDemo
    public void setSomethingPrivate(String somethingPrivate) {
        this.somethingPrivate = somethingPrivate;
    }
}

我已将此依赖项添加到pom。

  

弹簧引导起动的AOP

     

aspectjrt

     

aspectjweaver

我找到了一个解决方案,但我不明白他们想说什么。

UnsupportedPointcutPrimitiveException on simple AOP example

请指导我这个。任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:3)

Spring使用(默认情况下)基于代理的AOP,因此对joinpoint表达式的支持有限。仅call加入点不支持的execution加入点是。{1}}加入点。支持的连接点表达式是文档here

接下来,您尝试将AOP应用于非Spring托管bean,这也不适用于基于代理的解决方案。

对于这两种情况,您需要使用load或编译时编织以使其正常工作。