说说反射的用途及实现
发表于|更新于
|浏览量:
反射的用途
Java 反射机制是一个非常强大的功能,在很多的项目比如 Spring,MyBatis 都都可以看到反射的身影。通过反射机制,我们可以在运行期间获取对象的类型信息。利用这一点我们可以实现工厂模式和代理模式等设计模式,同时也可以解决 Java 泛型擦除等令人苦恼的问题。
反射的实现
获取一个对象对应的反射类,在 Java 中有下列方法可以获取一个对象的反射类
- 通过
getClass()方法 - 通过
Class.forName()方法 - 使用
类.class - 通过类加载器实现,
getClassLoader()
文章作者: 烦恼多一点
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 非鱼小站!
相关推荐

2022-07-13
JDK8 新特性
Java 基础 - JDK8 新特性概述以下列出两点重要特性: Lambda表达式(匿名函数) Stream多线程并行数据处理(重要) 新特性 接口的默认方法只需要使用default关键字即可,这个特性又叫扩展方法 Lambda表达式 Functional接口函数式接口是指仅仅只包含一个抽象方法的接口,每一个该类型的Lambda表达式都会被匹配到这个抽象方法。你只需要给你的接口添加@FunctionalInterface注解。 使用::双冒号关键字来传递方法(静态方法和非静态方法) Predicate接口和Lambda表达式 Function接口 Function有一个参数并且返回一个结果,并附带了一些可以和其他函数组合的默认方法。 compose方法表示在某个方法之前执行 andThen方法表示在某个方法之后执行 注意:compose和andThen方法调用之后都会把对象自己本身返回,这可以 方便链式编程 Supplier接口,返回一个任意泛型的值,和Function接口不同的是该接口 没有任何参数 Consumer接口,接收一个任意泛型的值,和Function接口不同...

2022-04-17
int和Integer有什么区别
int 是 Java 提供的 8 种原始数据类型之一。Java 为每个原始类型提供了封装类,Integer 是 Java 为 int 提供的封装类。 int 的默认值为 0,而 Integer 的默认值为 null,是引用类型,即 Integer 可以区分出未赋值和值为 0 的区别,int 则无法表达出未赋值的情况, Java 中 int 和 Integer 关系是比较微妙的。关系如下: int 是基本的数据类型; Integer 是 int 的封装类; int 和 Integer 都可以表示某一个数值; int 和 Integer 不能够互用,因为他们两种不同的数据类型;

2022-07-13
双亲委派模型
类加载器加载类的开放性类加载器(ClassLoader) 是Java语言的一项创新,也是Java语言流行的一个重要原因,在类加载的第一阶段“加载”过程中需要通过一个类的全限定名来回去定义此类的二进制字节流,完成这个动作的代码块就是 类加载器,这一动作是放在Java虚拟机外部去实现的,以便让应用程序自己去决定如何获取所需的类。 虚拟机规范并没有指明二进制字节流要从一个Class文件获取,或者说根本没有指明从哪里获取、怎样获取。这种开放使得Java在很多领域得到充分运用,例如: 从ZIP包中读取,这很常见,成为JAR,EAR,WAR格式的基础 从网络中获取,最典型的运用就是Applet 运用时计算生成,最典型的是动态代理技术,在java.lang.reflect.Proxy中,就是用了ProxyGrenerator.generateProxyClass 来为特定接口生成形式为“*$Proxy”的代理类的二进制字节流 有其它文件生成,最典型的JSP应用,由JSP文件生成对应的Class类 类加载器与类的唯一性类加载器虽然只用于实现类的加载动作,但是对于任意一个类,都需要由它的类加载...

2022-04-18
重载和重写的区别
重载 Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。 重写 Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法

2022-07-13
面向对象的特征
概述面向对象的三个基本特征是:封装、继承、多态。 封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 多态多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。 实现多态,有二种方式,覆盖,重载。

2022-04-24
Session 分布式处理
Session 复制在支持 Session 复制的 Web 服务器上,通过修改 Web 服务器的配置,可以实现将 Session 同步到其它 Web 服务器上,达到每个 Web 服务器上都保存一致的 Session。 优点:代码上不需要做支持和修改。 缺点:需要依赖支持的 Web 服务器,一旦更换成不支持的 Web 服务器就不能使用了,在数据量很大的情况下不仅占用网络资源,而且会导致延迟。 适用场景:只适用于Web服务器比较少且 Session 数据量少的情况。 可用方案:开源方案 tomcat-redis-session-manager,暂不支持 Tomcat8。 Session 粘滞将用户的每次请求都通过某种方法强制分发到某一个 Web 服务器上,只要这个 Web 服务器上存储了对应 Session 数据,就可以实现会话跟踪。 优点:使用简单,没有额外开销。 缺点:一旦某个 Web 服务器重启或宕机,相对应的 Session 数据将会丢失,而且需要依赖负载均衡机制。 适用场景:对稳定性要求不是很高的业务情景。 Session 集中管理在单独的服务器或服务器集群上使用缓...
评论
WalineDisqus
公告
This is my Blog







