zoukankan      html  css  js  c++  java
  • java高级教程 JDK代理和CGLIB代理两种方式 账户类

    com.itheima.aspect包:

    MyAspect.java

    package com.itheima.aspect;

     

    public class MyAspect {

        public void before() {

           System.out.println("已进行权限验证");

        }

        public void after() {

           System.out.println("已操作完成");

        }

    }

    一、JDK代理:

    com.itheima.jdk包

    JdkProxy.Java

    package com.itheima.jdk;

    import java.lang.reflect.InvocationHandler;

    import java.lang.reflect.Method;

    import java.lang.reflect.Proxy;

    import com.itheima.aspect.MyAspect;

    public  class JdkProxy implements InvocationHandler{

        private UserDao userDao;

        public Object createProxy(UserDao userDao)  {

           this.userDao = userDao;

           ClassLoader classLoader = JdkProxy.class.getClassLoader();

           Class[] clazz = userDao.getClass().getInterfaces();

           return Proxy.newProxyInstance(classLoader,clazz,this);

        }

        @Override

        public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {

               MyAspect myAspect = new MyAspect();   

               myAspect.before();

               Object obj = method.invoke(userDao,args);

               myAspect.after();

               return obj;

        }

    }

    JdkTest.java

    package com.itheima.jdk;

    public class JdkTest {

        public static void main(String[] args) {

           JdkProxy jdkproxy = new JdkProxy();

           UserDao userDao= new UserDaoimp();

           UserDao userDao1 = (UserDao)jdkproxy.createProxy(userDao);

           userDao1.queryUser();

           userDao1.deleteUser();

           userDao1.changeUser();

        }

    }

    UserDao.java

    package com.itheima.jdk;

    public interface UserDao {

        public void queryUser();

        public void deleteUser();

        public void changeUser();

    }

    Userdaoimp.java

    package com.itheima.jdk;

    public class UserDaoimp implements UserDao{

        public void queryUser() {

           System.out.println("查询用户信息");

        }

        public void deleteUser() {

           System.out.println("删除用户信息");

        }

        public void changeUser() {

           System.out.println("修改用户信息");

        }

    }

    二、CGLIB代理

    com.itheima.cglib包

    CglibProxy.java

    package com.itheima.cglib;

    import java.lang.reflect.Method;

    import org.springframework.cglib.proxy.Callback;

    import org.springframework.cglib.proxy.Enhancer;

    import org.springframework.cglib.proxy.MethodInterceptor;

    import org.springframework.cglib.proxy.MethodProxy;

    import com.itheima.aspect.MyAspect;

    public class CglibProxy implements  MethodInterceptor {

        public Object createProxy(Object target) {

           Enhancer enhancer = new Enhancer();

           enhancer.setSuperclass(target.getClass());

           enhancer.setCallback(this);

           return enhancer.create();

        }

        public Object intercept(Object proxy, Method method,Object[] args,

                                MethodProxy methodProxy) throws Throwable {

           MyAspect myAspect = new MyAspect();

           myAspect.before();

           Object obj = methodProxy.invokeSuper(proxy, args);

           myAspect.after();

           return obj;

        }

    }

    CglibTest.java

    package com.itheima.cglib;

    public class CglibTest {

        public static void main(String[] args) {

           CglibProxy cglibproxy = new CglibProxy();

           UserDao userDao = new UserDao();

           UserDao userDao1 = (UserDao)cglibproxy.createProxy(userDao);

           userDao1.queryUser();

           userDao1.deleteUser();

           userDao1.changeUser();

        }

    }

    UserDao.java

    package com.itheima.cglib;

    public class UserDao {

        public void queryUser() {

           System.out.println("查询用户信息");

        }

        public void deleteUser() {

           System.out.println("删除用户信息");

        }

        public void changeUser() {

           System.out.println("修改用户信息");

        }

    }

  • 相关阅读:
    STM32——项目需求之低功耗的停机模式
    sscanf函数——强大的C语言库函数
    二级指针偏移
    RTX基础教程目录
    #pragma pack(push) 和#pragma pack(pop) 以及#pragma pack()
    Write thread-safe servlets [reproduced]
    C++程序员如何转Java
    How to implement equals() and hashCode() methods in Java[reproduced]
    The Java Enum: A Singleton Pattern [reproduced]
    VS Code
  • 原文地址:https://www.cnblogs.com/1314-520/p/12635994.html
Copyright © 2011-2022 走看看