Java 可以拦截对类的方法的任何调用吗?
在我们的项目中,我们使用的是Java 可以拦截对类的方法的任何调用吗?,java,spring,Java,Spring,在我们的项目中,我们使用的是springframework,现在我需要拦截对任何对象方法的任何方法调用。Spring是否提供了这样的设施?我的意思是,例如,我们有一种方法: public void m(){ MyClass a = new MyClass(); a.method(); //I need to intercept that method call and invoke some stuff } 这样的事情可能吗?您需要将其包括在项目中 拦截MyClass中定义的方
springframework
,现在我需要拦截对任何对象方法的任何方法调用。Spring
是否提供了这样的设施?我的意思是,例如,我们有一种方法:
public void m(){
MyClass a = new MyClass();
a.method(); //I need to intercept that method call and invoke some stuff
}
这样的事情可能吗?您需要将其包括在项目中
拦截MyClass
中定义的方法调用的选项是:
@Around("* my.application.MyClass.*(..)")
public Object interceptAnyMethodCall(ProceedingJoinPoint pjp) throws Throwable {
Object retVal = pjp.proceed();
// ... your code
return retVal;
}
是的,这是可能的-您需要使用AOP。如果您希望拦截来自spring托管bean的每个方法调用,那么spring AOP java代理就足够了。否则,您将需要使用AspectJ。而不是独立的Spring。您需要与AspectJ集成。@SotiriosDelimanolis您的意思是,如果我想拦截对任何可能不是SpringBean方法的方法的任何调用,AspectJ是必需的。没错。使用Spring,您只能拦截Springbean,并且只能使用一些有限的代理aop行为。你需要AspectJ来进行奇特的拦截。@SotiriosDelimanolis只是想澄清一下,
AspectJ
只是一个框架,可以通过maven依赖项简单地应用,还是需要在JVM
层上集成?比这要复杂一点。看见