1、切面after切点,将目标方法执行返回值,开放给切点

This commit is contained in:
刘羽铖 2019-09-25 11:04:46 +08:00
parent 84875f0ff9
commit 1df8f968d0
2 changed files with 66 additions and 52 deletions

View File

@ -4,26 +4,27 @@ import java.lang.reflect.Method;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;
/**
* 通过日志打印方法的执行时间的切面
* @author Looly
*
*/
public class TimeIntervalAspect extends SimpleAspect{
private static final long serialVersionUID = 1L;
public class TimeIntervalAspect extends SimpleAspect {
private static final long serialVersionUID = 1L;
private TimeInterval interval = new TimeInterval();
private TimeInterval interval = new TimeInterval();
@Override
public boolean before(Object target, Method method, Object[] args) {
interval.start();
return true;
}
@Override
public boolean after(Object target, Method method, Object[] args, Object returnVal) {
Console.log("Method [{}.{}] execute spend [{}]ms", target.getClass().getName(), method.getName(), interval.intervalMs());
return true;
}
@Override
public boolean before(Object target, Method method, Object[] args) {
interval.start();
return true;
}
@Override
public boolean after(Object target, Method method, Object[] args, Object returnVal) {
Console.log("Method [{}.{}] execute spend [{}]ms return value [{}]", target.getClass().getName(), method.getName(), interval.intervalMs(), StrUtil.toString(returnVal));
return true;
}
}

View File

@ -14,47 +14,60 @@ import cn.hutool.aop.aspects.TimeIntervalAspect;
*/
public class AopTest {
@Test
public void aopTest() {
Animal cat = ProxyUtil.proxy(new Cat(), TimeIntervalAspect.class);
String result = cat.eat();
Assert.assertEquals("猫吃鱼", result);
}
@Test
public void aopTest() {
Animal cat = ProxyUtil.proxy(new Cat(), TimeIntervalAspect.class);
String result = cat.eat();
Assert.assertEquals("猫吃鱼", result);
cat.seize();
}
@Test
public void aopByCglibTest() {
Dog dog = ProxyUtil.proxy(new Dog(), TimeIntervalAspect.class);
String result = dog.eat();
Assert.assertEquals("狗吃肉", result);
}
@Test
public void aopByCglibTest() {
Dog dog = ProxyUtil.proxy(new Dog(), TimeIntervalAspect.class);
String result = dog.eat();
Assert.assertEquals("狗吃肉", result);
dog.seize();
}
static interface Animal {
String eat();
}
interface Animal {
String eat();
/**
* 有接口
*
* @author looly
*
*/
static class Cat implements Animal {
void seize();
}
@Override
public String eat() {
return "猫吃鱼";
}
}
/**
* 有接口
*
* @author looly
*
*/
static class Cat implements Animal {
/**
* 无接口
*
* @author looly
*
*/
static class Dog {
public String eat() {
return "狗吃肉";
}
}
@Override
public String eat() {
return "猫吃鱼";
}
@Override
public void seize() {
System.out.println("抓了条鱼");
}
}
/**
* 无接口
*
* @author looly
*
*/
static class Dog {
public String eat() {
return "狗吃肉";
}
public void seize() {
System.out.println("抓了只鸡");
}
}
}