Java.反射

java.反射

1.概念

反射:框架设计的灵魂

将类的各个组成部分封装为其他对象。这就是反射机制

反射的好处:

  • 在程序运行中,操作这些对象
  • 可以解耦,降低程序的耦合性,提高程序的可扩展性

2.获取Class对象的方式

同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是是同一个。

2.1Class.forname("全类名")方式

将字节码文件加载进内存,返回Class对象

多用于配置文件,将类名定义在配置文件中。读取文件,加载类。

2.2通过类名的属性class获取

多用于参数的传递

2.3对象.getClsss()方法

getClass()方法在object类中定义着,所有类都继承object类,都有这个方法

多用于对象的获取字节码的方式

3.使用Class对象

大部分都是获取的功能

3.1获取成员变量们

Filed[] getFields() //获取所有public修饰的成员变量 返回一个Filed[]数组
Filed getField(String name)//获取指定名称 public修饰的成员变量
Field[] getDeclaredFields()  //获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name) 

Field成员变量

  • 获取值

    • Object get(Object obj)  
      
  • 设置值

    • void set(Object obj, Object value)
      
  • 忽略安全的访问权限修饰符安全检查

    • setAccessible(boolean);//暴力反射
      

3.2获取构造方法们

Constructor<?>[] getConstructors()  //获取所有
Constructor<T> getConstructor(类<?>... parameterTypes)  
Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)  

3.3获取成员方法们

Method[] getMethods()  
Method getMethod(String name, 类<?>... parameterTypes)  
Method[] getDeclaredMethods()
Method getDeclaredMethod(String name, 类<?>... parameterTypes)  

3.4获取类名

String getName()  获取类名
上一篇:SpringAOP[8]-如何自动代理@Transactional


下一篇:第二节:REST风格的案例及源码分析