首页 » SEO优化 » javainvokephp技巧_聊聊IOC和AOP都依靠的Java反射机制

javainvokephp技巧_聊聊IOC和AOP都依靠的Java反射机制

访客 2024-12-12 0

扫一扫用手机浏览

文章目录 [+]

本文就来磋商一下Java反射的观点和基本事理,以及我们可以利用反射机制来做什么。

什么是反射

Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或工具的属性和方法。

javainvokephp技巧_聊聊IOC和AOP都依靠的Java反射机制

Java属于先编译再运行的措辞,程序中工具的类型在编译期就确定下来了。
当程序在运行时可能须要动态加载某些类,这些类由于之前用不到,以是没有被加载到JVM。
通过反射,可以在运行时动态地创建工具并调用其属性,不须要提前在编译期知道运行的工具是谁。

javainvokephp技巧_聊聊IOC和AOP都依靠的Java反射机制
(图片来自网络侵删)
反射的事理

Java的反射事理和Class工具有关系。
反射机制实质是JVM得到Class工具之后,再通过Class工具进行反编译,从而获取工具的各种信息。

Class工具的由来是JVM对类加载过程中,将.class文件读入内存,并为之创建一个Class工具。
创建Class工具的过程如下:

当实行new语句创建一个工具时,会触发JVM加载这个类的.class文件;JVM从本地磁盘找到.class文件并加载到JVM内存中。
.class文件载入内存往后,JVM会自动创建一个Class工具,一个类只会产生一个Class工具。

JVM创建Class工具过程

Class本身是一个类,位于java.lang包下。
一样平常可以通过三种办法得到Class工具。
得到Class工具后,就可以反向获取工具的各种信息。

(1)getClass()方法;

Class clazz = u.getClass();

(2)任何数据类型(包括基本的数据类型)都有一个“静态”的class属性;

Class clazz = User.class;

(3)通过Class类的 forName() 方法;

Class clazz = Class.forName( "com.xxx.User" );

反射能获取什么信息

判断工具的类型:我们一样平常利用 instanceof 关键字来判断某个工具是否为某个类的实例,同时也可以借助反命中Class工具的 isInstance() 方法来判断某个工具是否为某个类的实例。

创建实例:利用Class工具的 newInstance() 方法来创建Class工具对应类的实例。

获取布局方法:先可以通过Class工具获取指定的布局方法(Constructor)工具,再调用Constructor工具的 newInstance() 方法来创建工具。

getConstructor( ):获取某个公有布局方法;

getDeclaredConstructor( ):获取某个布局方法, 可以是私有,或受保护、默认、公有;

getConstructors( ):获取所有公有布局方法;

getDeclaredConstructors( ):获取所有的布局方法,包括私有、受保护、默认、公有。

获取成员变量:通过Class工具的forName()方法可以得到类成员的字段信息,可以进一步对成员变量进行操作。

Class clazz= Class.forName ( "com.xxx.User" );

Field f = clazz.getField ( "name" );

f.set ( u, "微说互联网" ); // 个中u是User实例,通过Field.set()可以对u的成员变量赋值。

获取成员方法:通过Class工具的 getMethod() 或 getDeclaredMethods() 方法,可以得到某个指定的成员方法,并可以进一步调用该方法。
getMethods() 可以得到全部公有方法,getDeclaredMethods() 还可得到包括私有方法在内的全部方法。

Method m = clazz.getMethod ( "setName", User.class );

m.invoke ( u, "微说互联网" ); // 个中u是User实例,"xxx"是User.setName()须要的参数。

前文《Spring AOP动态代理的实现办法 》先容过,在AOP动态代理的实现中,便是通过反射机制来获取被代理类的成员方法,然后再通过代理类调用。

总结

反射机制最大的优点是:能够让我们很方便地创建灵巧的代码,这些代码可以在运行时装置,无需在组件之间进行源代码的链接,更加随意马虎实现面向工具。

可以说,如果没有反射机制,就不会有现在开拓中常用的各种框架。
不过反射调用方法可以忽略权限检讨,可能会毁坏封装性导致安全问题。

我会持续更新关于物联网、云原生以及数字科技方面的文章,用大略的措辞描述繁芜的技能,也会偶尔揭橥一下对IT家当的意见,欢迎大家关注,感激。

标签:

相关文章

httpphp上传文件技巧_php的文件上传

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己去世磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步...

SEO优化 2024-12-12 阅读0 评论0