标签归档:反射

动态代理方案,优缺点比较(asm,javaassist,cglib,jdk)

来源:炫迈哥

为什么需要动态代理?

  • 如spring等这样的框架,要增强具体业务的逻辑方法,不可能在框架里面去写一个静态代理类,只能按照用户的注解或者xml配置来动态生成代理类。
  • 业务代码内,当需要增强的业务逻辑非常通用(如:添加log,重试,统一权限判断等)时,使用动态代理将会非常简单,如果每个方法增强逻辑不同,那么静态代理更加适合
  • 使用静态代理时,如果代理类和被代理类同时实现了一个接口,当接口方法有变动时,代理类也必须同时修改
    继续阅读
发表在 Java基础 | 标签为 | 留下评论

Java反射机制应用实践

来源:ziwenxie

引言

Java反射机制是一个非常强大的功能,在很多大型项目比如Spring, Mybatis都可以看见反射的身影。通过反射机制我们可以在运行期间获取对象的类型信息,利用这一特性我们可以实现工厂模式代理模式设计模式,同时也可以解决Java泛型擦除等令人苦恼的问题。本文我们就从实际应用的角度出发,来应用一下Java的反射机制

继续阅读

发表在 Java基础 | 标签为 | 留下评论

反射及用途介绍

来源:sczyh30

一、回顾:什么是反射?

反射 (Reflection) 是 Java 的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性

Oracle 官方对反射的解释是:

Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions.
The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.

简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。

继续阅读

发表在 Java基础 | 标签为 | 留下评论