Java中静态代理使用与原理详解

简介: Java中静态代理使用与原理详解

【1】概述


代理模式是为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。


被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象


代理模式有不同的形式, 主要有三种静态代理、动态代理(JDK 代理、接口代理)和Cglib 代理(可以在内存

动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。


静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。

【2】应用案例

① 代码实现

具体要求

  • 定义一个接口:ITeacherDao
  • 目标对象TeacherDAO 实现接口ITeacherDAO
  • 使用静态代理方式,就需要在代理对象TeacherDAOProxy 中也实现ITeacherDAO
  • 调用的时候通过调用代理对象的方法来调用目标对象.

特别提醒:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法

public interface ITeacherDao {
  void teach(); // 授课的方法
}
public class TeacherDao implements ITeacherDao {
  @Override
  public void teach() {
    System.out.println(" 老师授课中  。。。。。");
  }
}
//代理对象,静态代理
public class TeacherDaoProxy implements ITeacherDao{
  private ITeacherDao target; // 目标对象,通过接口来聚合
  //构造器
  public TeacherDaoProxy(ITeacherDao target) {
    this.target = target;
  }
  @Override
  public void teach() {
    System.out.println("开始代理  完成某些操作。。。。。 ");//方法
    target.teach();
    System.out.println("提交。。。。。");//方法
  }
}
//测试客户端
public class Client {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    //创建目标对象(被代理对象)
    TeacherDao teacherDao = new TeacherDao();
    //创建代理对象, 同时将被代理对象传递给代理对象
    TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
    //通过代理对象,调用到被代理对象的方法
    //即:执行的是代理对象的方法,代理对象再去调用目标对象的方法 
    teacherDaoProxy.teach();
  }
}

② UML类图


③ 静态代理的优缺点

优点:在不修改目标对象的功能前提下, 能通过代理对象对目标功能扩展

缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类

一旦接口增加方法,目标对象与代理对象都要维护




目录
相关文章
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
447 0
|
存储 缓存 安全
深入讲解 Java 并发编程核心原理与应用案例
本教程全面讲解Java并发编程,涵盖并发基础、线程安全、同步机制、并发工具类、线程池及实际应用案例,助你掌握多线程开发核心技术,提升程序性能与响应能力。
505 0
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
754 24
|
存储 缓存 Java
我们来详细讲一讲 Java NIO 底层原理
我是小假 期待与你的下一次相遇 ~
509 2
|
XML JSON Java
Java 反射:从原理到实战的全面解析与应用指南
本文深度解析Java反射机制,从原理到实战应用全覆盖。首先讲解反射的概念与核心原理,包括类加载过程和`Class`对象的作用;接着详细分析反射的核心API用法,如`Class`、`Constructor`、`Method`和`Field`的操作方法;最后通过动态代理和注解驱动配置解析等实战场景,帮助读者掌握反射技术的实际应用。内容翔实,适合希望深入理解Java反射机制的开发者。
1143 13
|
算法 Java 索引
说一说 Java 并发队列原理剖析
我是小假 期待与你的下一次相遇 ~
201 1
|
安全 Java 编译器
JD-GUI,java反编译工具及原理: JavaDecompiler一个Java反编译器
Java Decompiler (JD-GUI) 是一款由 Pavel Kouznetsov 开发的图形化 Java 反编译工具,支持 Windows、Linux 和 Mac Os。它能将 `.class` 文件反编译为 Java 源代码,支持多文件标签浏览、高亮显示,并兼容 Java 5 及以上版本。JD-GUI 支持对整个 Jar 文件进行反编译,可跳转源码,适用于多种 JDK 和编译器。其原理基于将字节码转换为抽象语法树 (AST),再通过反编译生成代码。尽管程序可能带来安全风险,但可通过代码混淆降低可读性。最新版修复了多项识别错误并优化了内存管理。
11523 1
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
1006 58