博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring自学日志05(代理模式)
阅读量:3949 次
发布时间:2019-05-24

本文共 1756 字,大约阅读时间需要 5 分钟。

为什么要学习代理模式?因为这就是SpringAOP的底层!

抽象角色:一般是接口或抽象类
真实角色:被代理的角色
代理角色:代理真实角色,代理后还会做一些附属操作
客户:访问代理角色的人

静态代理模式的好处

可以是真实角色的操作更加纯粹!不用去关注一下公共的业务

公共业务就交给代理角色,实现的业务的分工。
公共业务拓展是,方便集中管理!

静态代理缺点

一个真实角色就会产生一个代理角色,代码量会翻倍

动态代理

动态代理和静态代理角色一样

动态代理是动态生成的,不是我们直接写好的!
动态代理分为两大类:基于接口的动态代理,基于类的动态代理
1.基于接口—JDk动态代理
2.基于类—cglib
3.java字节码实现:javasist
需要两个类:Proxy,invocationHandler

动态代理模式的好处

可以是真实角色的操作更加纯粹!不用去关注一下公共的业务

公共业务就交给代理角色,实现的业务的分工。
公共业务拓展是,方便集中管理!
动态代理的是一个接口,一般就是应对的一类业务
一个动态代理可以代理多个类,只要实现的同一个接口

动态代理缺点

环境搭建

Rent

package demo;//租房public interface Rent {
public void rent();}

Host

package demo;//房东public class Host implements Rent{
@Override public void rent() {
System.out.println("房东要出租房子!"); }}

ProxyInvovationHandler

package demo;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//用这个类生成自动代理类public class ProxyInvovationHandler implements InvocationHandler {
//被代理的接口 private Rent rent; public void setRent(Rent rent) {
this.rent = rent; } //生成代理类 public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this); } //处理代理实例,并返回结果 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//动态代理本质是反射 Object result = method.invoke(rent,args); return result; }}

Client

package demo;//客户public class Client {
public static void main(String[] args){
//真实角色 Host host=new Host(); //代理角色 ProxyInvovationHandler pih = new ProxyInvovationHandler(); //通过调用程序处理角色来来处理我们调用的接口对象! pih.setRent(host); Rent rent=(Rent)pih.getProxy(); rent.rent(); }}

转载地址:http://clrwi.baihongyu.com/

你可能感兴趣的文章
昂山素季 Aung San Suu Kyi
查看>>
AI 人工智能第一课 从贝叶斯定理开始
查看>>
朴素贝叶斯python实现
查看>>
Logistic回归原理及公式推导
查看>>
并发性与并行性 并发性与并行性
查看>>
惰性求值,可组合和模块化的JavaScript
查看>>
How to Extend Django User Model 如何扩展Django用户模型
查看>>
两个行业的故事:编程语言与富裕国家和发展中国家之间的差异
查看>>
15个用于管理MySQL服务器mysqladmin命令
查看>>
服务器端I / O性能:Node,PHP,Java与Go
查看>>
多行文本编辑时,同一行编辑不同类型的字符时自动换行的问题
查看>>
如何使开机动画只播一次
查看>>
如何在平台上实现LED灯的效果?如信号灯,来短信/来电时LED动画闪烁
查看>>
restore factory属性的enable和disable
查看>>
Android LOG机制流程图
查看>>
如何在JNI中抛异常
查看>>
Android应用程序的完全退出
查看>>
Task和Activity相关的一些属性
查看>>
JAVA系统属性之user.home
查看>>
Android代码截屏
查看>>