不匹配此类型名称
Not Matching this type name
我在 com.aop.aspect
包中有很多方面 class。我想做的是工作所有 class 除了一个 class 命名为 com.aop.dao.MyDemoLoggingAspect
当我 运行 应用程序时,控制台上出现错误。
java.lang.IllegalArgumentException: warning no match for this type name: com.aop.dao.MyDemoLoggingAspect [Xlint:invalidAbsoluteTypeName]
这是我的方面class
@Aspect
public class LuvAopExpressionsOrder {
@Pointcut("execution(* com.aop.dao.*.*(..))")
public void forDaoPackage() {}
// create pointcut for getter methods
@Pointcut("execution(* com.aop.dao.*.get*(..))")
public void getter() {}
// create pointcut for setter methods
@Pointcut("execution(* com.aop.dao.*.set*(..))")
public void setter() {}
// create pointcut for setter methods
@Pointcut("!execution(* com.aop.dao.MyDemoLoggingAspect.*(..))")
public void excludeMyDemoLoggingAspect() {}
// create pointcut: include package ... exclude getter/setter and MyDemoLoggingAspect
@Pointcut("forDaoPackage() && !(getter() || setter()) && excludeMyDemoLoggingAspect() ")
public void forDaoPackageNoGetterSetter() {}
}
如果您使用 Spring AOP,您不必担心一个方面会拦截另一个方面的方法,因为 Spring 不支持这一点,如第 [=13= 章中所述].向下滚动一点并查找此信息框:
Advising aspects with other aspects?
In Spring AOP, aspects themselves cannot be the targets of advice from other aspects. The @Aspect
annotation on a class marks it as an aspect and, hence, excludes it from auto-proxying.
所以基本上你的问题不是问题。
但是,如果您使用 AspectJ via LTW,则不受此类限制,因此必须小心排除通常会因匹配切入点而被拦截的其他方面。我建议将方面放在易于排除的包中,否则您必须按 class 名称 class 名称进行。根据您的情况使用这些切入点:
!within(com.aop.dao.MyDemoLoggingAspect)
!within(com.acme.aop..*)
!within(com.acme..*Aspect)
我在 com.aop.aspect
包中有很多方面 class。我想做的是工作所有 class 除了一个 class 命名为 com.aop.dao.MyDemoLoggingAspect
当我 运行 应用程序时,控制台上出现错误。
java.lang.IllegalArgumentException: warning no match for this type name: com.aop.dao.MyDemoLoggingAspect [Xlint:invalidAbsoluteTypeName]
这是我的方面class
@Aspect
public class LuvAopExpressionsOrder {
@Pointcut("execution(* com.aop.dao.*.*(..))")
public void forDaoPackage() {}
// create pointcut for getter methods
@Pointcut("execution(* com.aop.dao.*.get*(..))")
public void getter() {}
// create pointcut for setter methods
@Pointcut("execution(* com.aop.dao.*.set*(..))")
public void setter() {}
// create pointcut for setter methods
@Pointcut("!execution(* com.aop.dao.MyDemoLoggingAspect.*(..))")
public void excludeMyDemoLoggingAspect() {}
// create pointcut: include package ... exclude getter/setter and MyDemoLoggingAspect
@Pointcut("forDaoPackage() && !(getter() || setter()) && excludeMyDemoLoggingAspect() ")
public void forDaoPackageNoGetterSetter() {}
}
如果您使用 Spring AOP,您不必担心一个方面会拦截另一个方面的方法,因为 Spring 不支持这一点,如第 [=13= 章中所述].向下滚动一点并查找此信息框:
Advising aspects with other aspects?
In Spring AOP, aspects themselves cannot be the targets of advice from other aspects. The
@Aspect
annotation on a class marks it as an aspect and, hence, excludes it from auto-proxying.
所以基本上你的问题不是问题。
但是,如果您使用 AspectJ via LTW,则不受此类限制,因此必须小心排除通常会因匹配切入点而被拦截的其他方面。我建议将方面放在易于排除的包中,否则您必须按 class 名称 class 名称进行。根据您的情况使用这些切入点:
!within(com.aop.dao.MyDemoLoggingAspect)
!within(com.acme.aop..*)
!within(com.acme..*Aspect)