知行编程网知行编程网  2022-12-24 17:30 知行编程网 隐藏边栏  2 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于java代理模式的分类的相关知识,包括java代理模式作用,以及java三种模式这些编程知识,希望对大家有参考作用。

java代理模式的分类


说到代理,想必大家都接触过。毕竟,当有些事情不想亲自处理的时候,他们就会选择委托他人来解决。然后在


java中也有这样一种机制,叫做代理模式。主要有两大类:静态代理和动态代理。一个在运行前存在,一个在运行后创建。下面我们就java中的两种代理模式进行讲解。



1.静态代理



由程序员创建或由第三方工具生成,然后编译;程序运行前,代理类

.class文件已经存在了。静态代理通常只代理一个类,并且要事先知道代理的是什么。

public class BlogStaticProxy implements IBlogService{
 
    private IBlogService blogService;
 
 
 
    public BlogStaticProxy(IBlogService blogService) {
 
        this.blogService = blogService;
 
    }
 
 
 
    @Override
 
    public void writeBlog() {
 
        System.out.println("start writing...");
 
        blogService.writeBlog();
 
        System.out.println("end writing...");
 
    }
 
}



2.动态代理



动态代理的代理类在程序运行前是不存在的,也就是说程序运行时代理类创建的代理模式变成了动态代理。在这种情况下,代理类不在

Java代码中定义好的,而是在程序运行时根据我们的在Java代码中的“指示”动态生成的。

public class MainClass {
    public static void main(String[] args) {
        //1、创建一个真实角色
        Singer target = new Singer();
        //2、调用Proxy.newProxyInstance方法,并构造一个InvocationHandler对象,
        //3、在对象内部重写invoke方法,同时调用method.invoke(target,args);
        //4、并在该方法的上下添加自己的代码逻辑
        //其中:target.getClass().getClassLoader():获取类加载器,用来生成代理对象;
        //   target.getClass().getInterfaces()获取接口元信息;
        ISinger iSinger = (ISinger) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“前”编写自己的业务逻辑
                Object returnValue = method.invoke(target,args);//此处通过反射调用真实对象对应的方法;
                System.out.println("动态代理---向观众问好");//在真实对象的方法被调用“后”编写自己的业务逻辑
                return returnValue;
            }
        });
        iSinger.sing();
    }
}
//测试结果
"C:\Program Files\Java\jdk1.8.0_211\bin\java.exe" "-javaagent:C:\Program.......
动态代理---向观众问好
sing a song
动态代理---向观众问好
 
Process finished with exit code 0


以上就是


java代理模式的分类


,看完本文的内容,想必大家已经能够区分静态代理和动态代理了。在实际使用中,可以根据自己的需要进行选择。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享