@within注解(类级)
注意:该注解是类级别注解, 通常与 @Around
、@Before
、@After
等注解结合使用,指定在特定类上执行的切面逻辑
"@within(com.annotation.other.A)"
该配置就是:如果某个类上标注了注解@A
,那么该类中的所有方法就会被匹配为切点,并且该类的子类中如果没有重写父类方法也会被匹配为切点,如果该类继承了其他类,那么从其父类继承过来的方法也不会被识别成切点。
@A
public class Human {
public void say(String sentence)
{
System.out.println("Human says:" + sentence);
}
public void run()
{
System.out.println("Human runs." );
}
}
----------------------------------------------------------
@Aspect
@Component
public class HumanAspect {
@Before("@within(com.annotation.other.B)")
public void execute1(){
System.out.println("@within --- A1");
}
}
Human中所有方法执行都会经过execute1
----------------------------------------------------------
public class Man extend Human {
}
Man继承了Human,Man中继承的来自Human中的未重写方法会被切面识别
@target 注解(类级)
注意:该注解也是类级别注解, 通常与 @Around
、@Before
、@After
等注解结合使用,指定在特定类上执行的切面逻辑
"@target(com.annotation.other.B)"
该配置就是:如果某个类上标注了注解@B
,那么该类中的所有方法就会被匹配为切点,不影响其子类和父类
@annotation注解(方法级)
注意:该注解是方法级别注解, 通常与 @Around
、@Before
、@After
等注解结合使用,指定在特定类上执行的切面逻辑
"@annotation(com.annotation.other.C)"
该配置就是:如果某个方法上标注了注解@c
,那么该方法就会被匹配为切点。
总结:
-
@within
会匹配到标注了指定注解的类,并且在该类的子类中,那些没有重写父类方法也会被匹配到。 -
@target
只匹配标注了指定注解的类。不涉及任何其他类。 -
@annotation
只匹配方法。