java静态代理
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
评论区
请写下您的评论...
猜你喜欢
blog
nginx配置代理静态资源-实现动静分离
linux系统
6698
方案一:一般配置方案二:访问某个域名时代理静态资源文件方案一:一般配置 如果以html、htm、gif、jpg、jpeg、bmp、png、ico、txt、js、css结尾的资源,均由nginx处理
weblog
4869
前言
好久就开始关注cglib动态代理了,但是到今天才算是有点搞明白~cglib动态代理底层用到了asm等字节码操作框架。不懂的可以先百度百度asm是干啥的,在这里也提供一些文章,但是可能比较深入
blog
初步探究cglib动态代理的原理
java基础
3443
初步探究cglib动态代理的原理之前我们说了一下jdk动态代理的原理http://www.jiajiajia.club/weblog/blog/artical/60本章说一下cglib动态代理,做个
blog
初步探究jdk动态代理的原理
java基础
2831
初步探究jdk动态代理1.先看代码实现packageclub.jiajiajia.test.staticproxy;publicinterfaceBuyHouse{voidbuyHosue
java springboot
1726
涉及知识点:java动态编译,java反射,io流,java文件操作,输入输出重定向,多线程与线程安全,mysql数据库设计等,理解起来难度较高。下面是我自己设计的几个问题,和一些测试数据。排序问题
blog
java动态编译技术原理分析
其他
4365
1.动态编译技术从JDK1.6开始引入了用Java代码重写的编译器接口,使得我们可以在运行时编译Java源码,然后用类加载器进行加载,让Java语言更具灵活性,能够完成许多高级的操作。2.本次要实现
java基础
4875
静态方法不能new内部类的实例对象解析:我们知道非静态内部类有一个特点就是可以访问外部类对象的非静态属性,而外部类的的属性只有再创建对象以后才有,而静态方法属于类,不属于对象,所以再main方法执行
ASM,java基础
1255
关于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
2024-08
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
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。