我有一个类有一些方法,我希望在每个方法之前和之后添加方法名称的日志。
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。
有没有办法实现这个目标?我知道注释可能是一种选择,但我不认为我是第一个遇到这个问题的人。
答案 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,如果它在您的项目中可以接受。