Java 如何在方面中调用钩子类的方法?
也许主题的名字不好。我试图解释清楚 我有课:Java 如何在方面中调用钩子类的方法?,java,hook,aop,aspectj,Java,Hook,Aop,Aspectj,也许主题的名字不好。我试图解释清楚 我有课: public class A(){ Field1 field1; Field2 field2; public void method1(){...} public void method2(){...} public void sourceMethod(ParameterClass parameter1){ //some code method1(); //some code m
public class A(){
Field1 field1;
Field2 field2;
public void method1(){...}
public void method2(){...}
public void sourceMethod(ParameterClass parameter1){
//some code
method1();
//some code
method2();
//some cdoe
}
}
我将钩住源代码方法:
这里我想重写所有代码。但是我需要调用method1()
和method2()
它可能使用AspectJ吗
@Around(value = "execution(* A.sourceMethod(Parameter)) && target(target)")
public void aroundSourceMethod(JoinPoint joinPoint, Object target){
// I need to write my realization sourceMethod here
// I want to invoke method1 and method2 here
}
目标将包含在其上执行sourceMethod的对象。由于您只建议A.sourceMethod(),因此可以假定它属于A类型,将其强制转换为该类型,并根据需要调用其方法:
((A) target).method1()
...
这并不漂亮,但应该奏效。你想实现什么?是否要在调用
sourceMethod()
之前执行方法method1()
和method2()
?通过写一个关于的建议?在这种情况下,为什么不在之前使用。另外,aspectJ将只提供一种拦截机制。调用必须通过反射进行。这与AspectJ无关。这个方法写得不好。我需要完全重写它,但是如果您正在围绕该方法编写一个方面,它不会从未执行的方法中逃脱。您可能只会执行method1()
和method2()
两次。因为,您的程序实际上将要进入sourceMethod()
,即使将方面编入您的程序中。如果我理解正确…我将不会在@Around aspect内执行continue方法是的,这是正确的,但它是一个hack.)
((A) target).method1()
...