#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干货盘点# 设计模式之代理模式:动态代理的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# 设计模式之代理模式:静态代理

java代理模式和字节码的探索#yyds干货盘点#

CGLIB动态代理探索(ASM,Spring)#yyds干货盘点#

#yyds干货盘点# Spring源码三千问Spring动态代理:什么时候使用的 cglib,什么时候使用的是 jdk proxy?

#yyds干货盘点# Spring核心之面向切面编程(AOP)

#yyds干货盘点# 老王读Spring AOP-5@Transactional产生AOP代理的原理