java中的代理分为哪两种,Java 代理类
说起代理,大家肯定都接触过。毕竟有些事务不想亲自处理的时候,会选择委托别人解决。然后java里有这样一种机制,叫做代理模式。主要分为两类:静态代理和动态代理。一个是运行前存在的,一个是运行后创建的。让我们解释一下java中的两种代理模式。
1.静态代理
由程序员创建或由第三方工具生成,然后编译;在程序运行之前。代理类的类文件已经存在。静态代理通常只代理一个类,需要事先知道代理是什么。
publicsclassblogstaticproxyimplementsiblogservice {
privateIBlogServiceblogService;
public blogstaticproxy(IBlogServiceblogService){
this . blog service=blog service;
}
@覆盖
publicvidwriteblog(){
System.out.println(开始写入.);
blog service . write blog();
System.out.println(结束写入.);
}
}2.动态代理
动态代理的代理类在程序运行前是不存在的,也就是说程序运行时代理类创建的代理模式就变成了动态代理。在这种情况下,代理类不是在Java代码中定义的,而是在程序运行时根据我们在Java代码中的“指令”动态生成的。
publicclassMainClass{
publicstaticvoidmain(String[]args){
nbsp;//1、创建一个真实角色
Singertarget=newSinger();
//2、调用Proxy.newProxyInstance方法,并构造一个InvocationHandler对象,
//3、在对象内部重写invoke方法,同时调用method.invoke(target,args);
//4、并在该方法的上下添加自己的代码逻辑
//其中:target.getClass().getClassLoader():获取类加载器,用来生成代理对象;
//target.getClass().getInterfaces()获取接口元信息;
ISingeriSinger=(ISinger)Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(),newInvocationHandler(){
@Override
publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{
System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“前”编写自己的业务逻辑
ObjectreturnValue=method.invoke(target,args);//此处通过反射调用真实对象对应的方法;
System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“后”编写自己的业务逻辑
returnreturnValue;
}
});
iSinger.sing();
}
}
//测试结果
"C:ProgramFilesJavajdk1.8.0_211binjava.exe""-javaagent:C:Program.......
动态代理---向观众问好
singasong
动态代理---向观众问好
Processfinishedwithexitcode0
以上就是java代理模式的分类,学习完本篇的内容后,想必大家已经能对静态代理和动态代理有所区分。在实际使用时,可以根据需求自行选择。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。