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()
...