代理模式(静态代理动态代理)代码实战(详细)
Posted 栗子~~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式(静态代理动态代理)代码实战(详细)相关的知识,希望对你有一定的参考价值。
文章目录
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
代理模式(静态代理、动态代理)代码实战(详细)
这里举个例子:
有一个公司想要招聘一个职位,公司大领导不会主动去找求职者吧,他应该让他下级员工,这里就以部门领导来代表下级员工,而求职者不可能直接到达部门领导,他们首先得经历一遍hr筛选后才能到达部门领导这里。
下面是代理方式的流程图:
其中真正被代理的对象为部门领导。
01 静态代理模式
代码实现:
interface Person
//安排工作
void applyJob();
class Boss implements Person
@Override
public void applyJob()
System.out.println("部门领导面试通过后帮忙安排工作,推荐给公司大领导");
//代理类
class Hr implements Person
//组合的方式引用代理对象Boss(遵循组合/聚合复用原则)
private Boss boss;
public Hr(Boss boss)
this.boss = boss;
@Override
public void applyJob()
//这里写具体的业务逻辑
System.out.println("hr 检查应聘者是否符合工作要求,推荐给部门领导");
boss.applyJob();
测试:
/**
* @description: TODO 静态代理
* @author 杨镇宇
* @date 2022/3/2 15:52
* @version 1.0
*/
public class ProxyTest
public static void main(String[] args)
Boss boss = new Boss();
Hr hr = new Hr(boss);
hr.applyJob();
效果:
02 动态代理模式
什么意思呢,大概的意思这个代理类(HR)不仅仅服务于这个部门领导,还服务于其他部门领导。
代码实现(给予JDK做动态代理):
/**
* @description: TODO 动态代理
* @author 杨镇宇
* @date 2022/3/2 16:27
* @version 1.0
*/
public class DyProxy
interface Person
void applyJob();
static class Boss implements Person
@Override
public void applyJob()
System.out.println("部门领导面试通过后帮忙安排工作,推荐给公司大领导");
//代理类
static class Hr implements InvocationHandler
private Object target;
public Hr(Object target)
this.target = target;
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
//这里写具体的业务逻辑
System.out.println("hr 检查应聘者是否符合工作要求,推荐给部门领导");
//通过反射来实现
Object o = method.invoke(target,args);
return o;
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException
Boss boss = new Boss();
Class <?> proxyclazz = Proxy.getProxyClass(Person.class.getClassLoader(),Person.class);
Constructor<?> constructor = proxyclazz.getConstructor(InvocationHandler.class);
Person person = (Person)constructor.newInstance(new Hr(boss));
person.applyJob();
效果:
03 静态代理和动态代理的区别
静态代理:代码层面,编辑器;
动态代理:运行时做代理(jdk,cglib);
以上是关于代理模式(静态代理动态代理)代码实战(详细)的主要内容,如果未能解决你的问题,请参考以下文章