#yyds干货盘点# 设计模式之代理模式:动态代理
Posted 浪费人生的风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# 设计模式之代理模式:动态代理相关的知识,希望对你有一定的参考价值。
设计模式之代理模式:动态代理
1.简述:
代理类并不是在Java代码中定义的,而是在运行时根据我们在Java代码中的“指示”动态生成的,或者说一个代理类是在程序运行时才获取到目标对象的代理。动态代理又称jdk代理。
动态代理让我们在不直接访问某些对象的情况下,通过代理机制也可以访问被代理对象的方法,所以可以应用在很多地方。比如RPC框架,Spring AOP机制。
2.代码实现:
/**
* 抽象角色接口
*/
public interface Hello
/**
* 打招呼
*/
void sayHello();
/**
* 目标对象角色类
*/
public class RealHello implements Hello
/**
* 实现接口的方法
*/
@Override
public void sayHello()
System.out.println("你好");
/**
* 动态代理类
*/
public class DynamicProxy implements InvocationHandler
//目标对象
private Object target;
public DynamicProxy(Object target)
this.target = target;
/**
* 代理实现方法
* @param proxy
* @param method
* @param args
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
before();
Object result=method.invoke(target,args);
after();
return result;
/**
* 在实现方法前可以做的事情
*/
public void before()
System.out.println("摘下耳机");
/**
* 在实现方法后做的事情
*/
public void after()
System.out.println("戴上耳机");
/**
* 动态代理测试
*/
public class DynamicProxyTest
public static void main(String[] args)
Hello hello=new RealHello();
hello.sayHello();
System.out.println("=====================");
System.out.println("动态代理:");
DynamicProxy dynamicProxy=new DynamicProxy(hello);
// 通过反射加载hello,获取hello接口的方法,生成动态代理
Hello helloProxy= (Hello) Proxy.newProxyInstance(hello.getClass().getClassLoader(),hello.getClass().getInterfaces(),dynamicProxy);
helloProxy.sayHello();
以上是关于#yyds干货盘点# 设计模式之代理模式:动态代理的主要内容,如果未能解决你的问题,请参考以下文章
CGLIB动态代理探索(ASM,Spring)#yyds干货盘点#
#yyds干货盘点# Spring源码三千问Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy?