如何在每次方法调用之前和之后自动调用方法

  • 本文关键字:方法 调用 之后 java reflection
  • 更新时间 :
  • 英文 :


我有一个类,它有一些方法,我想在每个方法之前和之后添加方法名的日志。

private void log(String msg){
    logger.info("=================================");
    logger.info(msg);
    logger.info("=================================");
}
private void method1(){
    log("Here I want to print method name" + " :start");
    //do stuff
    log("Here I want to print method name" + " :end");
}
private void method2(){
    log("Here I want to print method name" + " :start");
    //do stuff
    log("Here I want to print method name" + " :end");
}

理想情况下,我希望每个方法都能自动记录前后的日志,而不必每次都为每个方法调用log。

有办法做到这一点吗?我知道注释可能是一种选择,但我不认为我是第一个遇到这个问题的人。

有许多不同的方法来实现它。

首先,你可以使用Decorator Design Pattern。它允许您向对象添加一些额外的行为。下面是一个简短的例子:

public interface Car {
  public String drive();
}
public class SomeCar implements Car {
  @Override
  public String drive() {
    return "Drive some car";
  }
}
public abstract class CarDecorator implements Car {
  Car car;
  public CarDecorator(Car newPizza) {
    this.car = newPizza;
  }
  @Override
  public String drive() {
    //do somthing before
    String result = car.drive();
    //do someething after
    return result;
  }
}

你可以这样使用它,或者通过一些Factory of Car Objects创建所有实例:

Car car = new CarDecorator(new SomeCar());
car.drive();

此外,您可以使用面向方面的编程(AOP)来实现您的目标。例如,使用AspectJ或者如果你使用Spring框架——Spring AOP。

另一个解决方案是使用Java EE拦截器,如果它在您的项目中可以接受的话。

相关内容

  • 没有找到相关文章