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("修改用户信息");

    }

}

java高级教程 JDK代理和CGLIB代理两种方式 账户类_第1张图片

 

你可能感兴趣的:(java高级教程 JDK代理和CGLIB代理两种方式 账户类)