java静态代理

硅谷探秘者 1303 0 0

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


猜你喜欢
linux系统 3101 方案一:一般配置如果以html,htm,gif,jpg,jpeg,bmp,png,ico,txt,js,css结尾的资源,均由nginx处,否则转发到相应的服务即可server{listen80
weblog 2222 前言 好久就开始关注cglib动了,但是到今天才算是有点搞明白~cglib动底层用到了asm等字节码操作框架。不懂的可以先百度百度asm是干啥的,在这里也提供一些文章,但是可能比较深入
java基础 1562 初步探究cglib动的原之前我们说了一下jdk动的原http://www.jiajiajia.club/weblog/blog/artical/60本章说一下cglib动,做个
java基础 1116 初步探究jdk动1.先看码实现packageclub.jiajiajia.test.staticproxy;publicinterfaceBuyHouse{voidbuyHosue
java springboot 672 涉及知识点:java编译,java反射,io流,java文件操作,输入输出重定向,多线程与线程安全,mysql数据库设计等,解起来难度较高。下面是我自己设计的几个问题,和一些测试数据。排序问题
其他 2226 1.动编译技术从JDK1.6开始引入了用Java码重写的编译器接口,使得我们可以在运行时编译Java源码,然后用类加载器进行加载,让Java语言更具灵活性,能够完成许多高级的操作。2.本次要实现
java基础 3105 方法不能new内部类的实例对象解析:我们知道非内部类有一个特点就是可以访问外部类对象的非属性,而外部类的的属性只有再创建对象以后才有,而方法属于类,不属于对象,所以再main方法执行
linux系统 1863 1)进入到/etc/sysconfig/network-scripts目录下2)使用ls找到ifcfg-ethxxx文件,有的文件名是ifcfg-eth0,有的是ifcfg-eth(后面是一串数字),不过应该没什么影响。3)使用vim编辑此文件4)使用servicenetworkstart重启服务即可。
归档
2018年11月  12 2018年12月  33 2019年01月  28 2019年02月  28 2019年03月  32 2019年04月  27 2019年05月  33 2019年06月  6 2019年07月  12 2019年08月  12 2019年09月  21 2019年10月  8 2019年11月  15 2019年12月  25 2020年01月  9 2020年02月  5 2020年03月  16 2020年04月  4 2020年06月  1 2020年07月  7 2020年08月  13 2020年09月  9 2020年10月  5 2020年12月  3 2021年01月  1 2021年02月  5 2021年03月  7 2021年04月  4 2021年05月  4 2021年06月  1 2021年07月  7 2021年08月  2 2021年09月  8 2021年10月  9
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议
目录
祝愿神州十三飞行乘组平安归来