java的静态代理

若是我要访问一个明星,我不可能直接去找明星,也根本找不到,这个时候,我就只能找他的经纪人。测试

代理是同样的,this

若是一个对象想要访问另外一个对象,可是不能直接访问到,或者不想直接访问到,那么就须要一个中间人,至关于一个经纪人同样的角色,就是代理对象.net

代理对象能找到咱们要访问的真实对象吗?答案是确定的,否则要他干吗,就像是,经纪人确定能找到明星代理

代理对象怎么找到真实对象呢?那是由于代理对象持有一个真实对象的引用对象

/**
 * 代理类
 * Created by lidongyang on 2017/8/22 0022.
 */
public class Broker implements Person{
    //真实对象的引用
    private SuperStar linzhiling;

    public Broker(SuperStar linzhiling){
        this.linzhiling = linzhiling;
    }


    public void getMsg() {

        System.out.println("经纪人某某某");

        if(null == linzhiling){
            linzhiling = new SuperStar();
        }
        linzhiling.getMsg();
        System.out.println("您好,您是?");
    }
}
/**
 * 真实类
 * Created by lidongyang on 2017/8/22 0022.
 */
public class SuperStar implements Person{

    public void getMsg(){
        System.out.println("我叫林志玲,我是个明星");
    }

}
/**
 * 共同实现的接口,抽象类也可
 * Created by lidongyang on 2017/8/22 0022.
 */
public interface Person {
    void getMsg();
}
/**
 * 测试方法
 * Created by lidongyang on 2017/8/21 0021.
 */
public class LockTest{

    public static void main(String[] args) {
        Broker broker = new Broker(new SuperStar());
        broker.getMsg();
    }
}

输出blog

不难看出,若是一个对象须要代理类的话,每次都须要新建一个代理类,若是每一个类都须要一个代理类,那得多少代理类,太痛苦了。并且这个真实的类必须是已知的接口

怎么解决这个难题呢,答案就是动态代理,动态代理另一片文章写get

cglib动态代理地址:http://www.javashuo.com/article/p-hnstkwab-mv.htmlclass

jdk动态代理地址:http://www.javashuo.com/article/p-cewhubet-mu.htmljdk

相关文章
相关标签/搜索