@DeclareParents在面向方面编程的介绍中的注释

时间:2014-02-16 15:22:22

标签: java spring spring-aop

我正在使用Java中的注释进行面向Spring面向编程。我有一个Aspect LogAOP:

@Aspect
public class LogAOP {

  @DeclareParents(value="beans.service.*+",     //Line 1
                  defaultImpl= EventImpl.class)
  public static Event mixin;

  @Before("com.beans.business.businessService() &&" +
          "this(abc)")
  public void usage(Event abc) {
    abc.increment();
  }

}

我无法理解@DeclareParents注释的value属性中第1行中'+'符号的重要性。 即使我删除此+符号,该程序运行正常。我还搜索了Spring AOP(http://docs.spring.io/spring/docs/2.5.4/reference/aop.html)的官方文档,那里没有提到任何内容。

1 个答案:

答案 0 :(得分:5)

在使用类名或接口名称来匹配该类或接口及其所有子类之后使用+。所以,在这种情况下的切入点表达式:

@DeclareParents(value="beans.service.*+",     //Line 1
              defaultImpl= EventImpl.class)
public static Event mixin;

...将匹配包beans.service中定义的任何接口或类,以及这些类和接口的任何子类或实现类。可能需要它,因为实现类可能不在beans.service包中。在您的情况下,您没有看到效果,因为可能所有的实现类都在同一个包中。尝试在beans.service包中实现一个接口,并将实现类放在另一个包中。我想,你会看到差异。