平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每一篇文章都是心得总结,跟我学习你就是大牛!
Java代理【图文教程】_第1章
---静态代理
1 java代理简介
Java代理有3种方式:(1)静态代理;(2) jdk动态代理;(3)cglib动态代理。
名称解释:(1)代理类:需要创建的代理类;(2)委托类:被代理类。
静态代理和动态代理:
(1)静态代理:由程序员或者自动生成工具生成代理类,然后进行代理类的编译和运行。在代理类、委托类运行之前,代理类已经以.class的格式存在。也就是说代理类是编译java代码之前就写好了!
(2)动态代理:相比于静态代理,动态代理避免了我们编写各个繁琐的静态代理类,只是简单地指定一组接口及目标对象(被代理对象)就能动态生成被代理对象的代理对象。在程序运行时,动态代理对象由反射机制动态创建而成。
Jdk动态代理和cglib动态代理:Jdk动态代理和cglib动态代理是两种动态代理的实现方式。一般情况下实现接口的委托类的代理类,用jdk动态代理创建代理,未实现接口的委托类,则用cglib动态代理来创建委托类的代理类。
(1)Jdk动态代理:jdk中对jdk动态代理提供了默认支持;
(2)cglib动态代理: jdk中不支持cglib动态代理,需要引入cglib的jar包才能使用cglib动态代理(spring-core依赖中包含了cglib,引入spring-core也提供了对cglib的支持)。
2 静态代理
2.1 静态代理实现步骤
(1)定义一个接口或抽象类(ISubject);
(2)定义委托类(RealSubject)并实现ISubject接口或抽象类;
(3)定义代理类(RealSubjectProxy),同样实现ISubject接口或抽象类;
- 代理类中定义一个委托类引用的属性;
- 代理类的带参构造方法中给委托类属性赋值为委托类对象;
- 代理类实现的ISubject接口方法sayHello()中调用委托类对象的sayHello()方法,并可在代理类的sayHello()方法中编写增强代码。
(4)测试静态代理。
2.2 代码实战
定义接口:ISubject.java
定义委托类:SubjectImpl.java
定义代理类:SubjectProxy.java
测试类:Main.java
静态代理类需要手工去创建,并且每个委托类都对应一个代理类!编写和维护起来非常麻烦!!But,动态代理方式能解决!
下一章节将详细讲解java动态代理!敬请关注~
如果以上教程对您有帮助,为了不迷路,请关注一下吧~