欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java-反射(动态代理SpringAOP)

程序员文章站 2022-06-17 19:48:40
...

反射:框架设计的灵魂

  • 反射:将类的各个组成部分封装成其他对象(这就是反射机制)
  • java代码在计算机中经历的三个阶段
  • 1.源代码阶段
  • Java-反射(动态代理SpringAOP)
  • class(字节码)对象阶段
  • Java-反射(动态代理SpringAOP)
  • Runtime运行时阶段
  • Java-反射(动态代理SpringAOP)

把类的各个部分封装成对象的好处(变量,构造方法,成员方法)

1.可以在程序运行过程中操作这些对象。
Java-反射(动态代理SpringAOP)
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对象功能