利用反射来实现动态代理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用反射来实现动态代理相关的知识,希望对你有一定的参考价值。

实现动态代理,在mybaties中,不需要实现类框架帮创建,只需要

有一个dao接口就OK了

dao接口类

public interface UserDao {
public void save();
public void delete();
public void uodate();
}

实现类,只有增删该查方法

public class UserDaoImp implements UserDao {
@Override
public void save() {
System.out.println("保存的方法");
}
@Override
public void delete() {
System.out.println("删除的方法");
}

@Override
public void uodate() {
System.out.println("更新的方法");
}
}

proxy代理工厂,用来创建代理类,可以在增删该查之前之后添加功能,利用反射可以生成多个,

public class TestProxy implements InvocationHandler{
//记录了委托类对象即接口类
private Object obj;
//得到代理类对象
public Object getproxyObject(Object obj){
this.obj=obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("代理调用"+method.getName()+"开始");
//自动调用委托类的方法,Method method 委托类的update,delete,方法自动调用
Object result = method.invoke(obj, args);
System.out.println(result);
System.out.println("代理调用结束");

return result;
}

测试类

public class Test {
public static void main(String[] args) {
UserDao userDao=new UserDaoImp();
TestProxy factory =new TestProxy();
UserDao userproxy = (UserDao) factory.getproxyObject(userDao);
userproxy.save();
userproxy.delete();
userproxy.uodate();
}
}

 

以上是关于利用反射来实现动态代理的主要内容,如果未能解决你的问题,请参考以下文章

zbb20180930 代理模式 -静态代理-jdk动态代理-cglib动态代理

JDK动态代理和CGLIB代理的区别

JDK和CGLIB动态代理原理

动态代理

动态代理

跟王老师学反射:动态代理