java静态代理

2019 精帖
0 976

java静态代理示例

package club.jiajiajia.test.staticproxy;

public interface BuyHouse {
    void buyHosue();//买房子
}
package club.jiajiajia.test.staticproxy;

public class BuyHouseImpl implements BuyHouse {

    @Override
    public void buyHosue() {
        System.out.println("买房子");
    }
}
package club.jiajiajia.test.staticproxy;

public class BuyHouseProxy implements BuyHouse {

    private BuyHouse buyHouse;

    public BuyHouseProxy(final BuyHouse buyHouse) {
        this.buyHouse = buyHouse;
    }
    @Override
    public void buyHosue() {
        System.out.println("买房前准备");
        buyHouse.buyHosue();
        System.out.println("买房后装修");
    }
}
@Test
	public void test1(){
		BuyHouse bh=new BuyHouseImpl();//被代理对象
		BuyHouse bh2=new BuyHouseProxy(bh);//代理对象
		bh2.buyHosue();
		System.out.println();
		System.out.println("bh 对象是否是 BuyHouse 的实例:"+(bh instanceof BuyHouse));
		System.out.println("bh 对象是否是 BuyHouseImpl 的实例:"+(bh instanceof BuyHouseImpl));
		System.out.println("bh2 对象是否是 BuyHouse 的实例:"+(bh2 instanceof BuyHouse));
		System.out.println("bh2 对象是否是 BuyHouseImpl 的实例:"+(bh2 instanceof BuyHouseImpl));
	}

对于静态代理较为简单,不多说

/**
	 * 静态代理
	 * 所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
	 * 优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。 
	 * 缺点: 
	 * 1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。 
	 * 2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
	 */

重点:

所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。

这点和jdk动态代理,和cglib动态代理有很大的区别


运行打印内容:

买房前准备
买房子
买房后装修

bh 对象是否是 BuyHouse 的实例:true
bh 对象是否是 BuyHouseImpl 的实例:true
bh2 对象是否是 BuyHouse 的实例:true
bh2 对象是否是 BuyHouseImpl 的实例:false


留言(0)
加载更多
猜你喜欢