JAVA安全基础之代理模式(一)

代理模式是java的一种很常用的设计模式,理解代理模式,在我们进行java代码审计时候是非常有帮助的。

静态代理

代理,或者称为 Proxy ,简单理解就是事情我不用去做,由其他人来替我完成。在黄勇《架构探险》一书中,我觉得很有意思的一句相关介绍是这么说的:

赚钱方面,我就是我老婆的代理;带小孩方面,我老婆就是我的代理;家务事方面,没有代理。

代理类与被代理类都有个共同的特征,就是都实现了相同的接口。代理类调用被代理类的方法。

现在我们用一个demon来举例代理模式,假如一个班的同学要向老师交班费,但是都是通过班长把班费转交给老师。这里,班长就是代理学生上交班费。

1.(接口)创建Person接口:

public interface Person {
//上交班费
void giveMoney();
}

2.(被代理类)Student类实现了Person接口。Student可以具体实施上交班费的动作。

public class Student implements Person{
private String name; public Student(String name) {
this.name = name;
} public String getName() {
return name;
} @Override
public void giveMoney() {
System.out.println(name + "上交了班费");
}
}

3.(代理类)创建班长类StudentProxy,这个类也实现了Person接口,还另外持有一个Student类对象。他可以帮Student类执行giveMoney()方法

public class StudentProxy implements Person{
//被代理的学生
Student student; //传入被代理的对象
public StudentProxy(Student student) {
this.student = student;
} //代理上交班费,调用被代理学生的上交班费行为
@Override
public void giveMoney() {
student.giveMoney();
}
}

使用代理模式:

public class ProxyTest {
public static void main(String[] args) {
//创建被代理类,xiaoming同学
Student xiaoming = new Student("xiaoming");
//创建代理类,把xiaoming同学传给代理类StudentProxy班长
StudentProxy banzhang = new StudentProxy(xiaoming);
//用代理类执行被代理类的方法
banzhang.giveMoney();
}
}

执行结果:

到这里假设一个场景,班长作为中间人,帮忙交班费时候,又给老师转达了一些话,比如成绩有所提升...... 这是只需要修改代理类StudentProxy就可以做到。

新建一个talk方法,放入giveMoney中调用

public class StudentProxy implements Person{
//被代理的学生
Student student; //传入被代理的对象
public StudentProxy(Student student) {
this.student = student;
} //学习有进步
private void talk(Student student){
System.out.println(student.getName() + "最近学习有进步");
} //代理上交班费,调用被代理学生的上交班费行为
@Override
public void giveMoney() {
talk(student);
student.giveMoney();
}
}

执行结果:

到这里理解了静态代理模式后,为我们下一章节介绍动态代理打下基础。

欢迎关注我的公众号,同步更新喔

JAVA安全基础之代理模式(一)的更多相关文章

  1. JAVA安全基础之代理模式(二)

    JAVA安全基础之代理模式(二) 上篇讲到静态代理模式,这时候我们发现,一个代理类只能为一个类服务,如果需要代理的类很多,那么就需要编写大量的代理类,比较繁琐.所以就有了动态代理 动态代理 动态代理的 ...

  2. Java的三种代理模式

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  3. Java的三种代理模式(Spring动态代理对象)

    Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...

  4. Java设计模式学习记录-代理模式

    代理模式 代理模式是常见设计模式的一种,代理模式的定义是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起 ...

  5. java设计模式之Proxy(代理模式)

    java设计模式之Proxy(代理模式) 2008-03-25 20:30 227人阅读 评论(0) 收藏 举报 设计模式javaauthorizationpermissionsstringclass ...

  6. Java设计模式之《代理模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6525527.html 代理模式算是我接触较早的模式,代理就是中介,中间人.法律上也有代理, ...

  7. Java的三种代理模式简述

    本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...

  8. 理解java的三种代理模式

    代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class ...

  9. Java的三种代理模式&完整源码分析

    Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCache缓存的实现机制](https://www.c ...

随机推荐

  1. tomcat启动时启动窗口出现乱码一招搞定

    先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却非常碍眼,影响视觉效果! tomcat启动时启动窗口出现乱码的解决 ...

  2. Linux进程理解与实践(五)细谈守护进程

    一. 守护进程及其特性      守护进程最重要的特性是后台运行.在这一点上DOS下的常驻内存程序TSR与之相似.其次,守护进程必须与其运行前的环境隔离开来.这些环境包括未关闭的文件描述符,控制终端, ...

  3. 【Java】jeesite初始配置以及代码生成工具的使用

    jeesite简单使用 首先去技术服务与支持.版本区别一览表 - JeeSite 4.x找到源码下载的部分 JeeSite 源码下载:https://gitee.com/thinkgem/jeesit ...

  4. 【笔记】matplotilb数据可视化基础

    matplotilb基础 matplotilb是我们使用的一个基础的可视化方法 一般来说,使用matplotilb是较为专业的绘制图形的选择 不需要很专业的时候可以只是用matplotilb的子模块p ...

  5. python3.9 manage.py runserver 报错问题解决

    报错信息如下 You have 13 unapplied migration(s). Your project may not work properly until you apply the mi ...

  6. SpringCloud升级之路2020.0.x版-19.Eureka的服务端设计与配置

    本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford Eureka Se ...

  7. 在npm Vue单页面的环境下,兄弟组件之间通信Bus

    参考1:https://www.cnblogs.com/wangruifang/p/7772631.html 参考2:https://www.jianshu.com/p/b3d09c6c87bf 在m ...

  8. spring boot 2.0.0 + shiro + redis实现前后端分离的项目

    简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码学和会话管理.使用Shiro的易于理解的API,您可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大 ...

  9. springmvc学习日志三

    一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...

  10. C# ThreadLocal源码追踪

    ThreadLocal 字段成员: private Func<T>? _valueFactory; 一个获取默认值的委托 不同线程共享此成员. [ThreadStatic] private ...