我正在研究一个日志方面,它需要截获所有用自定义注释注释的类和方法。
下面是可以在类和方法上注释的自定义注释类:
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Loggable {
LogLevel value();
}
我使用这些切入点表达式拦截带有注释@loggable
的方法和类,这适用于所有简单类,但不适用于扩展或实现的类。
//Works for annotation @Loggable on class level
@Pointcut("execution(* *(..)) && within(@com.logger.Loggable *)")
public void classAnnotationLogger() {
}
//Working for methods annotated with @Loggable
@Before(value = "@annotation(loggable)", argNames = "jp, loggable")
public void logBeforeAdvice(JoinPoint jp, Loggable loggable) {
..
..
}
@Component
@Loggable(LogLevel.INFO)
public abstract class Processor{
public void process(){
readProcess();
}
public abstract void readProcess();
}
@Service
@Loggable(LogLevel.INFO)
public class MyServiceProcessor extends Processor {
@Override
public void readProcess(){
...
...
}
}
Processor processor = applicationContext.getBean(MyServiceProcessor.class);
processor.readProcess();
但是对process()
而不是readprocess
调用通知。
当对任何类或方法应用注释@logabble
时,如何编写同时拦截对任何子类方法调用的切入点表达式?
嗯,首先这个
@Pointcut("execution(* *(..)) && within(@com.logger.Loggable *)")
public void classAnnotationLogger() {}
只是一个切入点,而不是一个建议,所以它不会做任何事情,除非你也有一个实际使用这个切入点的建议。你没有贴出这样的忠告,所以我只能推测。
其次,您没有提供任何会由
@Before(value = "@annotation(loggable)", argNames = "jp, loggable")
public void logBeforeAdvice(JoinPoint jp, Loggable loggable) {}
Processor processor = applicationContext.getBean(MyServiceProcessor.class);
processor.readProcess();
public void process() {
readProcess();
}
我试图在切入点中检测用注释注释的类的任何方法。 我试过这个: 但它不起作用。我做错了什么? 谢谢
我有一个场景,我需要拦截一些子类方法,但我找不到合适的切入点表达式来这样做。 我有一个面向客户机的接口,它有一个方法。 当用户调用方法时,我希望截获方法。我可以很容易地截获,但是似乎没有什么能截获子类方法。我甚至尝试使用自定义注释来注释这些信息方法,但没有成功。到目前为止,我提出了以下方面 将设置为true或false也没有帮助。我知道AOP不能拦截私有子类方法,但这些是公共的。有可能做到这一点吗
问题内容: 我正在寻找一个切入点,该切入点与类中具有特定注释的子类的类中的方法执行相匹配。出色的AspectJ备忘单帮助我创建了以下切入点: 这与带有@AnnotationToMatch的类A的所有方法调用匹配,但与扩展了A的类B的方法匹配。我如何将两者匹配? 问题答案:
如何计算方面中的Spring Security表达式?我想我可以很容易地使用完成这项工作的类I spring框架
add:如果我将方法存根添加到Fragment2中,就可以开始使用next annotation,但这是一个非常难看的解决方案 解决方案:多亏了@Kriegaex,我找到了解决方案: