Browse Source

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

刘羽铖 6 years ago
parent
commit
1df8f968d0

+ 15 - 14
hutool-aop/src/main/java/cn/hutool/aop/aspects/TimeIntervalAspect.java

@@ -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;
+    }
 }

+ 56 - 43
hutool-aop/src/test/java/cn/hutool/aop/test/AopTest.java

@@ -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 aopByCglibTest() {
-		Dog dog = ProxyUtil.proxy(new Dog(), TimeIntervalAspect.class);
-		String result = dog.eat();
-		Assert.assertEquals("狗吃肉", result);
-	}
-
-	static interface Animal {
-		String eat();
-	}
-
-	/**
-	 * 有接口
-	 * 
-	 * @author looly
-	 *
-	 */
-	static class Cat implements Animal {
-
-		@Override
-		public String eat() {
-			return "猫吃鱼";
-		}
-	}
-
-	/**
-	 * 无接口
-	 * 
-	 * @author looly
-	 *
-	 */
-	static class Dog {
-		public String eat() {
-			return "狗吃肉";
-		}
-	}
+    @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);
+		dog.seize();
+    }
+
+    interface Animal {
+        String eat();
+
+        void seize();
+    }
+
+    /**
+     * 有接口
+     * 
+     * @author looly
+     *
+     */
+    static class Cat implements Animal {
+
+        @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("抓了只鸡");
+        }
+    }
 }