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代理模式的分类,学习完本篇的内容后,想必大家已经能对静态代理和动态代理有所区分。在实际使用时,可以根据需求自行选择。

以上是 java代理模式的分类 的全部内容, 来源链接: utcz.com/z/542975.html

回到顶部