Spring的AOP实现(1)

AOP01

SpringAOP是Spring framework中的一个核心设计,本文开始写一个系列主要有七种方式完成不同aop的实现,第一种用的是java的动态代理,使用的是Proxy代理类的静态方法newProxyInstance完成AOP的实现

  1. 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);
    }
    
  2. 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;
        }
    }
    
  3. 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;
        }
    }
    
  4. MyAspect.java

    package com.qfedu.aop01;
    
    public class MyAspect {
    
        public void before(){
            System.out.println("********before**********");
        }
    
        public void after(){
            System.out.println("********after**********");
        }
    }
    
  5. 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()));
        }
    }
    
  6. 运行结果:

    --------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
    
发布了11 篇原创文章 · 获赞 26 · 访问量 4201

猜你喜欢

转载自blog.csdn.net/zpz2001/article/details/104710748