我读过Spring AOP不能拦截私有和受保护的方法,但它是以一种奇怪的方式拦截它们为什么是这样?为什么Spring AOP在某些情况下拦截受保护的方法?
我有这些功能,我想拦截:
public String getName(String string) {
System.out.println("Name : " + name + string);
return name;
}
protected String getNamesprotected(String string) {
System.out.println("Name : " + name + string);
return name;
}
这是我的@Aspect
代码:
@Aspect
public class Logging {
@Before("execution(* com.tutorialspoint.Student.*Name*(..))")
public void beforeAdvice(JoinPoint joinPoint){
System.out.println("Going to setup student profile."+joinPoint.getSignature().toString());
}
}
当执行该代码双方的getName和getNamesprotected被截获,但是当我执行该代码:
@Aspect
public class Logging {
@Before("execution(* com.tutorialspoint.Student.getNamesprotected(..))")
public void beforeAdvice1(JoinPoint joinPoint){
System.out.println("Going to setup student profile."+joinPoint.getSignature().toString());
}
}
然后没有任何东西被拦截。我也尝试用*getNamesprotected*
替换getNamesprotected
,但仍不拦截。它只在*Name*
在那里时截获。
任何人都可以解释为什么会发生这种情况吗?
除非您使用AspectJ而不是Spring AOP,否则您所描述的内容难以置信。我只是觉得你犯了一个错误。 Spring AOP永远不会拦截受保护的方法。如果您仍然认为它确实存在,请在GitHub上使用[SSCCE](http://sscce.org/)进行证明。然后,我愿意看看。 – kriegaex
你可以举一个例子SSCCE。我是新来的,所以不知道如何创建一个。 –
你是认真的吗?你甚至可以关注链接并阅读SSCCE的含义吗?如果你仍然不明白它的含义以及如何用你自己的代码创建一个代码,那么你要么完全缺乏作为软件开发人员的天赋,而应该尝试找到一份新工作或者你只是懒惰。我选择给你怀疑的好处,并拒绝认为你是一个糟糕的开发者。因此我认为懒惰是你的问题。所以,请尽可能尊重您的想法,您是否打算开启您的大脑并尝试帮助其他人帮助您回答您的问题? – kriegaex