我是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
  
  方面
  
  AspectJweaver


我找到了一个解决方案,但我不理解他们要说的话。

UnsupportedPointcutPrimitiveException on simple AOP example

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

谢谢。

最佳答案

Spring使用(默认情况下)基于代理的AOP,因此仅对连接点表达式提供了有限的支持。仅call连接点不支持的execution连接点。支持的连接点表达式在文档here中。

除此之外,您尝试将AOP应用于非Spring托管的bean,这也不适用于基于代理的解决方案。

对于这两种情况,您都需要使用load或编译时编织使其起作用。

关于java - 切入点表达式'abc(inString)'包含不受支持的切入点基元'call',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31416302/

10-09 13:44