用另一个方面包裹 spring 个方面
Wrap a spring aspects with another aspect
我已经在函数 runFunc
上声明了 foo
和 bar
两个方面,我想捕获 运行 函数 runcFunc
所花费的时间] & Bar
在 Foo
中,但它只捕获 runFunc
的时间。 Bar
独立 运行ning。
我想要如果我在一个函数上放置两个注释,第一个注释应该包装第二个注释,第二个注释应该包装函数 runfunc
。我怎样才能做到这一点?
事实证明,方面可以像包装函数一样轻松地包装其他方面。
以下代码有效。
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Foo {}
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Bar {}
@Aspect
@Component
public class A {
@Around("@annotation( foo )")
public void func1(final ProceedingJoinPoint pjp, Foo foo) throws Throwable {
System.out.println("foo start");
pjp.proceed();
System.out.println("foo end");
}
}
@Aspect
@Component
public class B {
@Around("@annotation( bar )")
public void func2(final ProceedingJoinPoint pjp, Bar bar) throws Throwable {
System.out.println("bar start");
pjp.proceed();
System.out.println("bar end");
}
}
下面的代码:
@Foo
@Bar
public void runFunc(){
System.out.println("Inside Run.runFunc");
}
输出如下:
foo start
bar start
Inside Run.runFunc
bar end
foo end
我已经在函数 runFunc
上声明了 foo
和 bar
两个方面,我想捕获 运行 函数 runcFunc
所花费的时间] & Bar
在 Foo
中,但它只捕获 runFunc
的时间。 Bar
独立 运行ning。
我想要如果我在一个函数上放置两个注释,第一个注释应该包装第二个注释,第二个注释应该包装函数 runfunc
。我怎样才能做到这一点?
事实证明,方面可以像包装函数一样轻松地包装其他方面。
以下代码有效。
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Foo {}
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Bar {}
@Aspect
@Component
public class A {
@Around("@annotation( foo )")
public void func1(final ProceedingJoinPoint pjp, Foo foo) throws Throwable {
System.out.println("foo start");
pjp.proceed();
System.out.println("foo end");
}
}
@Aspect
@Component
public class B {
@Around("@annotation( bar )")
public void func2(final ProceedingJoinPoint pjp, Bar bar) throws Throwable {
System.out.println("bar start");
pjp.proceed();
System.out.println("bar end");
}
}
下面的代码:
@Foo
@Bar
public void runFunc(){
System.out.println("Inside Run.runFunc");
}
输出如下:
foo start
bar start
Inside Run.runFunc
bar end
foo end