博客
关于我
Spring 静态代理与 动态代理 【在理解为学习AOP奠定基础】(七)
阅读量:233 次
发布时间:2019-03-01

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

Spring AOP 代理模式学习

代理模式

代理是通知目标对象后创建的对象。从客户端的角度看,代理对象和目标对象是一样的。

静态代理

出租房屋

public interface Rent { 
void Renthouse();
}

房东类

public class Host implements Rent {
@Override
public void Renthouse() {
System.out.println("房东有一套房子出租!!!");
}
}

代理类

public class Proxy implements Rent {
private Host host;
public Proxy(Host host) {
this.host = host;
}
@Override
public void Renthouse() {
host.Renthouse();
Money();
seeHose();
hetong();
}
public void Money() {
System.out.println("中介-收取一定的报酬会");
}
public void seeHose() {
System.out.println("中介-带我看房子。");
}
public void hetong() {
System.out.println("满意的话,签合同!");
}
}

测试类

public class client {
public static void main(String[] args) {
Host host = new Host();
Proxy proxy = new Proxy(host);
proxy.Renthouse();
}
}

动态代理

动态代理分为三大类:基于接口(JDK动态代理)、基于类(CGLIB动态代理)、Java字节码实现(Javassist)。

动态代理实现案例

public interface Rent {
void Rent();
}
public class Host implements Rent {
@Override
public void Rent() {
System.out.println("房东有一整套房子出租!!!");
}
}
public class ProxyInvocationHandler 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
);
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(rent, args);
}
}
public class client {
public static void main(String[] args) {
Host host = new Host();
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setRent(host);
Rent proxy = (Rent) pih.getProxy();
proxy.Rent();
}
}

动态代理的好处

  • 可以使真实角色的操作更加纯粹,不去关注一些公共的业务。
  • 公共部分交给代理角色,便于集中管理。
  • 公共部分发生扩展的部分也更容易实现。
  • 一个动态代理类可以代理多个类,只要实现了一个接口即可。
  • 通过以上内容,可以看出动态代理在实际应用中的重要性和优势。

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

    你可能感兴趣的文章
    Objective-C实现指定点 x 处计算多项式 f(x) 并返回值算法(附完整源码)
    查看>>
    Objective-C实现按位倒序(附完整源码)
    查看>>
    Objective-C实现按位的isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现按位运算符乘以无符号数multiplyUnsigned算法(附完整源码)
    查看>>
    Objective-C实现排队叫号系统(附完整源码)
    查看>>
    Objective-C实现控制NRP8S功率计读取功率 (附完整源码)
    查看>>
    Objective-C实现控制程控电源2306读取电流 (附完整源码)
    查看>>
    Objective-C实现摄氏温度和华氏温度互转(附完整源码)
    查看>>
    Objective-C实现播放器(附完整源码)
    查看>>
    Objective-C实现操作MySQL(附完整源码)
    查看>>
    Objective-C实现操作注册表 (附完整源码)
    查看>>
    Objective-C实现攀登 n 级楼梯的不同方式算法(附完整源码)
    查看>>
    Objective-C实现改变图片亮度算法(附完整源码)
    查看>>
    Objective-C实现数乘以二multiplyByTwo算法(附完整源码)
    查看>>
    Objective-C实现数列的和(附完整源码)
    查看>>
    Objective-C实现数字图像处理算法(附完整源码)
    查看>>
    Objective-C实现数组切片(附完整源码)
    查看>>
    Objective-C实现数组去重(附完整源码)
    查看>>
    Objective-C实现数组循环右移三次(附完整源码)
    查看>>
    Objective-C实现数组的循环右移(附完整源码)
    查看>>