java静态代理

硅谷探秘者 2759 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系统 6219 方案一:一般配置方案二:访问某个域名时资源文件方案一:一般配置  如果以html、htm、gif、jpg、jpeg、bmp、png、ico、txt、js、css结尾的资源,均由nginx处
weblog 4207 前言 好久就开始关注cglib动了,但是到今天才算是有点搞明白~cglib动底层用到了asm等字节码操作框架。不懂的可以先百度百度asm是干啥的,在这里也提供一些文章,但是可能比较深入
java基础 3073 初步探究cglib动的原之前我们说了一下jdk动的原http://www.jiajiajia.club/weblog/blog/artical/60本章说一下cglib动,做个
java基础 2476 初步探究jdk动1.先看码实现packageclub.jiajiajia.test.staticproxy;publicinterfaceBuyHouse{voidbuyHosue
java springboot 1726 涉及知识点:java编译,java反射,io流,java文件操作,输入输出重定向,多线程与线程安全,mysql数据库设计等,解起来难度较高。下面是我自己设计的几个问题,和一些测试数据。排序问题
其他 3906 1.动编译技术从JDK1.6开始引入了用Java码重写的编译器接口,使得我们可以在运行时编译Java源码,然后用类加载器进行加载,让Java语言更具灵活性,能够完成许多高级的操作。2.本次要实现
java基础 4532 方法不能new内部类的实例对象解析:我们知道非内部类有一个特点就是可以访问外部类对象的非属性,而外部类的的属性只有再创建对象以后才有,而方法属于类,不属于对象,所以再main方法执行
ASM,java基础 998   关于cglib的概念和原以及常用api,请参考:初步探究cglib动的原:http://www.jiajiajia.club/blog/artical/yjw520
归档
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 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。