码迷,mamicode.com
首页 > 其他好文 > 详细

代理(proxy)

时间:2015-03-13 23:46:37      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

意图:为其他对象提供一种代理以控制对这个对象的访问

结构

      技术分享

或者

技术分享

.静态代理

举个简单的例子,首先定义一个Ihello接口

代码

ihello.java

public interface Ihello {
    public void hello(String name);
}

然后让实现业务逻辑的HelloSpeaker类实现Ihello接口,HelloSpeaker.java代码如下

HelloSpeaker.java

public class HelloSpeaker implements Ihello{
    public void hello(String name){
          System.out.println("hello,"+name);
    }
}

可以看到,在HelloSpeaker类中没有任何日志的代码插入其中,日志服务的实现将被放到代理类中,代理类同样要实现Ihello接口:


HelloProxy.java

import java.util.logging.*;
public class HelloProxy implements Ihello{
    private Logger logger=Logger.getLogger(this.getClass().getName());
    private Ihello helloObject;
    public HelloProxy(Ihello helloObject){
            this.helloObject=helloObject;
    }
    public void hello(String name){
        log("hello method starts…");                 // 日志服务
         helloObject.hello(name);                    // 执行业务逻辑
        log("hello method ends…");                     // 日志服务
    }
    private void log(String msg){
        logger.log(Level.INFO,msg);
    }
}

在HelloProxy类的hello()方法中,真正实现业务逻辑前后可以安排记录服务,可以实际撰写一个测试程序来看看如何使用代理类。

proxydemo.java

public class ProxyDemo {
    public static void main(String[] args){
        Ihello proxy=new HelloProxy(new HelloSpeaker());
        proxy.hello("Justin");
    }
}

运行结果:

技术分享

应用场合:

1.远程代理

2.虚代理

3.保护代理

4.只能引用

补充动态代理

动态代理指的是通过一个代理对象来创建需要的业务对象,然后在这个代理对象中统一进行各种需求的处理
1、写一个类实现相应的InvocationHandler接口
2、创建要代理的对象

动态代理可以将一些横切性的问题(日志管理,权限控制)提取出来成为一个模块,之后在运行的时候根据需要切入到原有正常代码中。
步骤:
1、 创建动态代理类
创建一个类实现InvocationHandler接口。以后创建对象就完全通过这个代理类来进行创建
2、在代理类创建相应的要代理的对象

技术分享

3、创建一个静态的newInstance方法来创建代理对象

技术分享

4、创建了代理对象之后,这个代理对象在执行任何方法时都会先执行invoke方法,就可以在这个方法中加入控制信息

技术分享

5 、根据以上步骤之后,日志管理就被提取成为一个独立的模块,在运行时进行加入


6、由于使用的newInstance这个static的方法注入对象,所以无法使用Annotation需要使用xml的配置文件

技术分享
 
7、此时可以考虑为相应的方法增加Annotation来增强相应的操作

代理(proxy)

标签:

原文地址:http://www.cnblogs.com/elite-2012/p/4336116.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!