讲讲反射
参考地址:反射
1、反射定义:
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java 语言的反射机制。
2、项目中用的场景
①:在连接数据库加载数据库驱动时,必须通过反射来完成
②:框架中的注解、xml文件的解析,解析出来的是字符串,必须通过反射将字符串实例化成对象
③:在Spring的面向切面编程(AOP),需要通过反射创建代理对象
3、Java的反射与动态代理
动态代理(Dynamic Proxy): 可以在运行期,动态创建某个interface的实例,实际上是JVM在运行期动态创建class字节码并加载的过程。动态代理在Java中有着广泛的应用,比如Spring AOP、Hibernate数据查询、测试框架的后端mock、RPC远程调用、Java注解对象获取、日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等。
代理模式
代理模式:给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。
代理模式角色分为 3 种:
●Subject(抽象主题角色):定义代理类和真实主题的公共对外方法。通常被设计成接口
●RealSubject(真实主题角色):真正实现业务逻辑的类;
●Proxy(代理主题角色):用来代理和封装真实主题;
代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层。
如果根据字节码的创建时机来分类,可以分为静态代理和动态代理:
●所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。
●而动态代理的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以在运行前并不存在代理类的字节码文件。