AOP01
SpringAOP是Spring framework中的一个核心设计,本文开始写一个系列主要有七种方式完成不同aop的实现,第一种用的是java的动态代理,使用的是Proxy代理类的静态方法newProxyInstance完成AOP的实现
-
IUserService.java
package com.qfedu.aop01; import java.util.List; public interface IUserService<T> { /** * 获取所有的用户对象列表 * @return */ List<T> getAllUser(); /** * 保存用户 * @param user * @return */ boolean saveUser(T user); /** * 根据用户uid删除该uid对应的用户信息 * @param uid * @return */ boolean deleteUser(int uid); /** * 更新指定用户信息 * @param obj * @return */ boolean updateUser(T obj); }
-
UserServiceImpl.java
package com.qfedu.aop01; import java.util.ArrayList; import java.util.List; public class UserservcieImpl implements IUserService<Object> { @Override public List<Object> getAllUser() { System.out.println("--------getAllUser----------"); return new ArrayList<>(); } @Override public boolean saveUser(Object user) { System.out.println("--------saveUser----------"); return true; } @Override public boolean deleteUser(int uid) { System.out.println("--------deleteUser----------"); return false; } @Override public boolean updateUser(Object obj) { System.out.println("--------updateUser----------"); return true; } }
-
UserFactory.java
package com.qfedu.aop01; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class UserFactory { public static IUserService getUserService(){ IUserService us = new UserservcieImpl(); MyAspect ma = new MyAspect(); /** * * 使用Proxy类的静态方法newProxyInstance来实现对于目标对象us的代理 * 目的是在原本us可以做的事情之前和之后可以做额外的事情 * */ IUserService ius = (IUserService) Proxy.newProxyInstance(UserFactory.class.getClassLoader(), us.getClass().getInterfaces(), new InvocationHandler() { /** * 代理对象调用的回掉方法 * @param proxy 代理对象 * @param method 被代理的方法 * @param args 被代理方法的参数列表对象 * @return 每个方法的最终返回值 * @throws Throwable */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { ma.before(); //System.out.println(proxy); System.out.println("000000000" + method); System.out.println("000001111" + args); Object obj = method.invoke(us, args); ma.after(); System.out.println("111111111" + obj); return obj; } }); return ius; } }
-
MyAspect.java
package com.qfedu.aop01; public class MyAspect { public void before(){ System.out.println("********before**********"); } public void after(){ System.out.println("********after**********"); } }
-
TestAOP01.java
package com.qfedu.aop01; import org.junit.Test; public class TestAOP01 { @Test public void testUserService(){ IUserService us = new UserservcieImpl(); System.out.println(us.getAllUser()); System.out.println(us.updateUser(new Object())); System.out.println(us.deleteUser(1)); System.out.println(us.saveUser(new Object())); System.out.println("==============="); IUserService us2 = UserFactory.getUserService(); System.out.println(us2.getAllUser()); System.out.println(us2.updateUser(new Object())); System.out.println(us2.deleteUser(2)); System.out.println(us2.saveUser(new Object())); } }
-
运行结果:
--------getAllUser---------- [] --------updateUser---------- true --------deleteUser---------- false --------saveUser---------- true =============== ********before********** 000000000public abstract java.util.List com.qfedu.aop01.IUserService.getAllUser() 000001111null --------getAllUser---------- ********after********** 111111111[] [] ********before********** 000000000public abstract boolean com.qfedu.aop01.IUserService.updateUser(java.lang.Object) 000001111[Ljava.lang.Object;@6ae40994 --------updateUser---------- ********after********** 111111111true true ********before********** 000000000public abstract boolean com.qfedu.aop01.IUserService.deleteUser(int) 000001111[Ljava.lang.Object;@1a93a7ca --------deleteUser---------- ********after********** 111111111false false ********before********** 000000000public abstract boolean com.qfedu.aop01.IUserService.saveUser(java.lang.Object) 000001111[Ljava.lang.Object;@3d82c5f3 --------saveUser---------- ********after********** 111111111true true