Java-如何在每个方法调用之前和之后自动调用方法

时间:2015-08-21 01:30:24

标签: 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。

有没有办法实现这个目标?我知道注释可能是一种选择,但我不认为我是第一个遇到这个问题的人。

1 个答案:

答案 0 :(得分:0)

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

首先,您可以使用装饰器设计模式。它允许您向对象添加一些其他行为。这是一个简短的例子:

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框架时{ - 3}}。

另一个解决方案是使用Spring AOP,如果它在您的项目中可以接受。