java代理 jdk动态代理应用例子

来源:爱站网时间:2019-03-08编辑:网友分享
java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制,需要了解的朋友可以跟随爱站技术频道的小编一起来看下java代理 jdk动态代理应用例子。

java代理有jdk动态代理、cglib代理,这里只说下jdk动态代理,jdk动态代理主要使用的是java反射机制(既java.lang.reflect包)
原理是(歌手、经纪人做例子):
建立一个公共的接口,比如:歌手public interface Singer;
用具体的类实现接口,比如:周杰伦,他是歌手所以实现Singer这个类,class MySinger implements Singer
建立代理类,这里也就是经纪人,他需要实现InvocationHandler类,并重写invoke方法
这样当有什么事情,要找周杰伦(具体类)的时候,就必须先到经纪人(代理类)那里处理,代理人在决定要不要与你见面(该方法要不要执行)
1、歌手接口

复制代码 代码如下:

public interface Singer {

public abstract void sing();

public abstract String s();
}


2、具体的歌手

复制代码 代码如下:


public class MySinger implements Singer {
public void sing() {
// TODO Auto-generated method stub
System.err.println("唱歌。。。。");
}
}


3、代理类(经纪人)

复制代码 代码如下:


public class agent implements InvocationHandler{
public Object target;

//绑定
public Object bind(Object target){
this.target=target;
//必须放回Proxy
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}

//重新
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object o =null;
System.out.println("开始事务");
System.out.println("判断权限");

o = method.invoke(target, args);//执行方法

System.out.println("结束事务");
return o;
}
}


4、测试(为什么要间接口能,下面你会发现代理返回的是他们的接口类,这要一个代理类,就可以代理多个类,只要该类是同个一个接口的是实现)

复制代码 代码如下:


public class Test {
public static void main(String[] args) {
//
agent a =new agent();
Singer s= (Singer) a.bind(new MySinger());
s.sing();
}
}

到这里,java代理 jdk动态代理应用例子就讲完了。如果有什么不清楚可以留言给我。如果觉得我写得不错的话,请给我一个大拇指,谢谢!

上一篇:Java反射之私有字段和方法解析

下一篇:Java实现插入排序 Insert sort的实例

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载