业务:
给表中的数据打不同的标签 如品牌标签 产品标签 情感标签等
打标签的逻辑
log.info("{} Start tagging {}",table,label)
// 具体打标签的逻辑
log.info("{} End tagging {}",table,label)
除了具体的打标签的逻辑外 日志信息是可以共用的
如果用Python来操作就很简单 定义一个装饰器即可 如下所示
def log(func):
def wrapper(*args):
print('{} -- Start tagging {}'.format(*args))
result = func(*args)
print('{} -- End tagging {}'.format(*args))
return result
return wrapper
@log
def tagging_A(table,lable):
# 不关心日志 只有具体的业务逻辑
print("do something here")
@log
def tagging_B(table,lable):
print("do something here")
当调用tagging_A或tagging_B的时候 会自动加上日志
但是Java没有像Python这么好用的装饰器 所以决定采用模板模式 如下所示
// 模板
private void taggingTemplate(String table,String label,Runnable action){
log.info("{} -- Start tagging {}",table,label);
action.run(); // 具体的打标签逻辑
log.info("{} -- End tagging {}",table,label);
}
public void taggingA(){
taggingTemplate("table_a","label_A",()->{
// 具体的打标签逻辑放在这里
System.out.println("do something here");
});
}
除了模板模式外 不知道还有没其他轻量级的方式可以在Java中模拟Python的装饰器?
AOP了解下