Java-反射(动态代理SpringAOP)
程序员文章站
2022-06-17 19:48:40
...
反射:框架设计的灵魂
- 反射:将类的各个组成部分封装成其他对象(这就是反射机制)
- java代码在计算机中经历的三个阶段
- 1.源代码阶段
- class(字节码)对象阶段
- Runtime运行时阶段
把类的各个部分封装成对象的好处(变量,构造方法,成员方法)
1.可以在程序运行过程中操作这些对象。
IDEA中的反射机制 (IDEA是一保存自动编译形成字节码文件)
2.可以解耦,提高程序的可扩展性。
获取class对象的方式
- Class.forName(“全类名”):将字节码文件加载进内存,返回class对象(java代码未进内存阶段)
- 类名.class :通过类名的属性来获取 (java代码进了内存class类对象阶段)
- 对象.getClass():getClass方法在Object类中定义着(有Persion对象了,runtime运行时阶段)
public class ReflectDemo1 {
public static void main(String[] args) throws Exception {
//第一种方式Class.forName("全类名")
Class cls = Class.forName("com.lin.domain.Persion");
System.out.println(cls);
//第二种方式
Class cls2 = Persion.class;
System.out.println(cls2);
//第三种方式
Persion p = new Persion();
Class cls3 = p.getClass();
System.out.println(cls3);
//== 比较三个对象
System.out.println(cls == cls2);//true
System.out.println(cls == cls3);//true
}
}
结论:同一个字节码文件(*.class)再一次程序运行过程中,只会被加载一次,无论通过哪这一种方式获取的class对象都是同一个。
class对象功能
下一篇: SpringAOP动态代理原理