首页 > 其他分享 >反射与泛型、动态代理

反射与泛型、动态代理

时间:2023-03-04 10:58:06浏览次数:30  
标签:反射 Java 代理 擦除 泛型 动态

泛型

在Java中的泛型简单来说就是:在创建对象或调⽤⽅法的时候才明确下具体的类型

好处是:代码更加简洁(不再需要强制转换),程序更加健壮(在编译期间没有警告,在运⾏期就不会出现ClassCastException异常),                类型限制提高程序的类型安全

集合中常用,IDEA也不建议使用原生集合,也就是没有添加泛型的

另外就是基础组件了,为了通用行会用到泛型

--java3y《对线面试官》

 

什么事泛型擦除

编译阶段使用泛型,运行阶段取消泛型,就是泛型擦除

反射

反射就是Java可以给我们在运⾏时获取类的信息

运行时:在编译器写的代码是 .java ⽂件,经过javac 编译会变成 .class ⽂件,class ⽂件会被JVM装载运⾏(这⾥就是真正运⾏着我们所写的代码(虽然是被编译过的),也就所谓的运⾏时

在运⾏时获取类的信息,其实就是为了让我们所写的代码更具有「通⽤性」和「灵活性」,一般用在工具上

像SpringMVC 你在⽅法上写上对象,传⼊的参数就会帮你封装到对象上

Mybatis可以让我们只写接⼝,不写实现类,就可以执⾏SQL

你在类上加上@Component注解,Spring就帮你创建对象

都有反射的身影:约定⼤于配置,配置⼤于硬编码

通过”约定“使⽤姿势,使⽤反射在运⾏时获取相应的信息(毕竟作为⼀个”⼯具“是真的不知道你是怎么⽤的),实现代码功能的「通⽤性」和「灵活性」

泛型是会擦出的,为什么反射能获取到泛型的信息

(泛型的信息只存在编译阶段,在class字节码就看不到泛型的信息了)

泛型擦除是有范围的,定义在类上的泛型信息是不会被擦除的。Java 编译器仍在 class ⽂件以 Signature 属性的⽅式保留了泛型信息

 

动态代理

动态代理其实就是代理模式的⼀种,代理模式是设计模式之⼀

代理模型有静态代理和动态代理。静态代理需要⾃⼰写代理类,实现对应的接⼝,⽐较麻烦

在Java中,动态代理常⻅的⼜有两种实现⽅式:JDK动态代理和CGLIB代理

JDK动态代理其实就是运⽤了反射的机制,⽽CGLIB代理则⽤的是利⽤ASM框架,通过修改其字节码⽣成⼦类来处理

JDK动态代理会帮我们实现接⼝的⽅法,通过invokeHandler对所需要的⽅法进⾏增强

 

标签:反射,Java,代理,擦除,泛型,动态
From: https://www.cnblogs.com/deity-night/p/17177826.html

相关文章

  • QT的Proxy Model(代理模型)
    在Qt中,ProxyModel(代理模型)是一种机制,可以让我们在不修改源数据的情况下,对数据进行排序、筛选、修改、隐藏、转换等操作。ProxyModel实际上是一种中间层,它将来自源模型的......
  • 【代理】【四】代理源码解析-Cglib代理-Generator代理对象创建过程
    1 前言 上节我们简单感受了下Cglib的一个代理过程,并且我也说到了Enhancer创建代理的时候,首先会创建对象Key出来,用于标识这个类以及将其作为缓存的Key,然后再创建代理对......
  • Apache设置反向代理解决js跨域问题
    这是一个很简单的方案,通过启用Apache反向代理解决js跨域问题为什么要这么做?在现在的开发过程中大家会遇到这样一个问题:后端代码写好之后,前端的小伙伴需要将后端代码部署......
  • 进阶必备 - Java 反射由浅入深
    本博文主要记录我学习Java反射(reflect)的一点心得,在了解反射之前,你应该先了解Java中的Class类,如果你不是很了解,可以先简单了解下。一、Java反射机制参考了许多博文......
  • 【代理】【三】代理源码解析-Cglib代理-环境准备以及简单介绍
    1 前言之前我们看过了JDK动态代理的源码了,今天我们大概花三四篇(因为一篇文章东西太多写的人费劲看的人也累哈)来看看Cglib的代理源码过程,其中涉及到asm包中的东西构建类......
  • 从Linq的Where方法理解泛型、委托应用场景
      最近遇到了一个问题,Linq的Where里面传递的是什么?Where的功能是什么实现的?没有第一时间答上来,在整理相关资料后决定自行实现Linq的Where方法来加深印象。什么是泛型......
  • DK 动态代理和 CGLIB 动态代理的区别是什么?
    Java中实现动态代理有两种方式:JDK动态代理和CGLIB动态代理。动态代理的主要作用是在不改变原有代码的情况下,对原有代码进行增强。JDK动态代理JDK动态代理具体实现步骤:......
  • 代理异常捕获
    背景在某些场景,比如过滤器,拦截器,或者某些代理类的时候,ControllerAdvance是捕获不到异常的方案:使用springmvc框架,让程序直接导入进来//验证etbc登录try{......
  • 9_Spring_JDK动态代理
    ​ 代理模式是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。房产中介代替业主卖房 静态代理     ......
  • 9_Spring_JDK动态代理
    ​ 代理模式是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。房产中介代替业主卖房 静态代理     ......