Java动态代理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java动态代理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2804字,纯文字阅读大概需要5分钟。
内容图文
![Java动态代理](/upload/InfoBanner/zyjiaocheng/841/3792feadb5434eaa9c42a1f87de1b325.jpg)
Java动态代理
在讲解java代理时先讲解一下java的反射,这里讲解的java反射是针对于方法并且简单的介绍。
对于java反射,可以使用Class.forName(package + “.”+className)来获取Class类。通过Class类可以获取对于的java类型的方法,也可以通过实例化的getClass来获取Class对象。其中如下:
getMethod(String name,Class<?>…param)表示通过方法名称,参数来获取对应的public方法
getMethods()表示获取publicd的方法
getDeclaredMethod(String name, Class<?>... para)表示通过方法名称,参数来获取public,procted,private方法
getDeclaredMethods()获取所有的方法
对于java的代理,有两个重要的类,分别是:Proxy和InvocationHandler。
其中InvocationHandler是自己定义的代理类需要实现的接口。其中要实现的方法是
Object invoke(Object proxy, Method method, Object[] args)throws Throwable
Proxy表示的时自定定义的代理的对象,method表示调用的方法,args表示调用的方法需要传入的参数。
Proxy中有一个静态的方法
Public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)
loader表示自定义的代理的ClassLoader。可以通过Class 中getClassLoader()来获取
interfaces表示接口,使用Class中的getInterfaces()类获取,h是InvocationHandler的实例化,就是自定义的代理类。
以下是实例:
自定义的代理:
package cn.com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DyProxy implements InvocationHandler {
private Object obj;
public DyProxy(Object obj) {
this.obj = obj;br/>}
@override
public object invoke(object arg0, method arg1, object[] arg2) throws throwable {
system.out.println("调用的方法: " + arg1.getname());
system.out.println("调用的类名: " + obj.getclass().getname());
system.out.println("arg0 " + arg0.getclass().getname());
return arg1.invoke(obj, arg2);
}
}
定义的接口:
package cn.com.proxy.service.api;
public interface studentservice {
public string getstudent();
}
实现的接口定义:
package cn.com.proxy.service.impl;
import cn.com.proxy.service.api.studentservice;
public class studentserviceimpl implements studentservice {br/>@override
public string getstudent() {
system.out.println("getstudent");
return "sucess";
}
}
执行类:
package cn.com.proxy;
import java.lang.reflect.proxy;
import cn.com.proxy.service.api.studentservice;
import cn.com.proxy.service.impl.studentserviceimpl;
public class testmain {
public static void main(string[] args) throws classnotfoundexception {
//创建自己定义的借口实例
studentservice student = new studentserviceimpl();
class cls = class.forname("cn.com.proxy.service.impl.studentserviceimpl");
system.out.println(cls.getname() + " ============================ ");
//实例化自己定义的代理对象
dyproxy instance = new dyproxy(student);
//进行代理
studentservice sub = (studentservice) proxy.newproxyinstance(instance.getclass().getclassloader(),
student.getclass().getinterfaces(), instance);
//在代理的情况下调用方法
sub.getstudent();
}
}
内容总结
以上是互联网集市为您收集整理的Java动态代理全部内容,希望文章能够帮你解决Java动态代理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。