mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
1、切面after切点,将目标方法执行返回值,开放给切点
This commit is contained in:
parent
84875f0ff9
commit
1df8f968d0
@ -4,26 +4,27 @@ import java.lang.reflect.Method;
|
|||||||
|
|
||||||
import cn.hutool.core.date.TimeInterval;
|
import cn.hutool.core.date.TimeInterval;
|
||||||
import cn.hutool.core.lang.Console;
|
import cn.hutool.core.lang.Console;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过日志打印方法的执行时间的切面
|
* 通过日志打印方法的执行时间的切面
|
||||||
* @author Looly
|
* @author Looly
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class TimeIntervalAspect extends SimpleAspect{
|
public class TimeIntervalAspect extends SimpleAspect {
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
private TimeInterval interval = new TimeInterval();
|
private TimeInterval interval = new TimeInterval();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean before(Object target, Method method, Object[] args) {
|
public boolean before(Object target, Method method, Object[] args) {
|
||||||
interval.start();
|
interval.start();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean after(Object target, Method method, Object[] args, Object returnVal) {
|
public boolean after(Object target, Method method, Object[] args, Object returnVal) {
|
||||||
Console.log("Method [{}.{}] execute spend [{}]ms", target.getClass().getName(), method.getName(), interval.intervalMs());
|
Console.log("Method [{}.{}] execute spend [{}]ms return value [{}]", target.getClass().getName(), method.getName(), interval.intervalMs(), StrUtil.toString(returnVal));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,47 +14,60 @@ import cn.hutool.aop.aspects.TimeIntervalAspect;
|
|||||||
*/
|
*/
|
||||||
public class AopTest {
|
public class AopTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void aopTest() {
|
public void aopTest() {
|
||||||
Animal cat = ProxyUtil.proxy(new Cat(), TimeIntervalAspect.class);
|
Animal cat = ProxyUtil.proxy(new Cat(), TimeIntervalAspect.class);
|
||||||
String result = cat.eat();
|
String result = cat.eat();
|
||||||
Assert.assertEquals("猫吃鱼", result);
|
Assert.assertEquals("猫吃鱼", result);
|
||||||
}
|
cat.seize();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void aopByCglibTest() {
|
public void aopByCglibTest() {
|
||||||
Dog dog = ProxyUtil.proxy(new Dog(), TimeIntervalAspect.class);
|
Dog dog = ProxyUtil.proxy(new Dog(), TimeIntervalAspect.class);
|
||||||
String result = dog.eat();
|
String result = dog.eat();
|
||||||
Assert.assertEquals("狗吃肉", result);
|
Assert.assertEquals("狗吃肉", result);
|
||||||
}
|
dog.seize();
|
||||||
|
}
|
||||||
|
|
||||||
static interface Animal {
|
interface Animal {
|
||||||
String eat();
|
String eat();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
void seize();
|
||||||
* 有接口
|
}
|
||||||
*
|
|
||||||
* @author looly
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
static class Cat implements Animal {
|
|
||||||
|
|
||||||
@Override
|
/**
|
||||||
public String eat() {
|
* 有接口
|
||||||
return "猫吃鱼";
|
*
|
||||||
}
|
* @author looly
|
||||||
}
|
*
|
||||||
|
*/
|
||||||
|
static class Cat implements Animal {
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* 无接口
|
public String eat() {
|
||||||
*
|
return "猫吃鱼";
|
||||||
* @author looly
|
}
|
||||||
*
|
|
||||||
*/
|
@Override
|
||||||
static class Dog {
|
public void seize() {
|
||||||
public String eat() {
|
System.out.println("抓了条鱼");
|
||||||
return "狗吃肉";
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 无接口
|
||||||
|
*
|
||||||
|
* @author looly
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static class Dog {
|
||||||
|
public String eat() {
|
||||||
|
return "狗吃肉";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void seize() {
|
||||||
|
System.out.println("抓了只鸡");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user