反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

枚举

在某些情况下,一个类的对象是有限而且固定的,比如季节类,它只有4个对象。这种实例有限而且固定的类,在Java里被称为枚举类。

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。

枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

反射

把JVM通过符号引用动态加载Java类字节码的能力映射成各种Java类的成分类。

Class

不管一个类生成多少个对象,与这个类对应的Class对象只有一个,是JVM在加载时动态生成的,用来封装类在方法区中的数据结构,

通俗点讲Class对象就像一面镜子一样映射出类的成分,Class对象是整个反射的入口.通过动态生成的Class对象去调用目标类的字段、方法、构造函数.

这种技术就是反射.

注解

注解就相当于标签,给什么加上注解就相当于给什么贴上标签,这个标签在 编译、加载、JVM 执行的某个阶段可以读出来使用,判断加标签元素具有的某方面的属性。

泛型

是提供给编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,泛型不会出现在运行期,编译后就会被擦除,使程序运行效率不受影响 。

泛型限定

主要是指在定义泛型类或者泛型接口的时候,给泛型的类型 T 加上一个可以接受的类型的范围限制,上限使用 extends,比如 <T extends Object>,下限使用 super,比如 <T super ArrayList>

类加载器
所谓类加载器: 就是加载类的工具.类加载器也是java类,类加载器的委托机制: java中的所有类加载器采用具有父子关系的树形结构进行组织,在实例化每个类加载器对象时,需要为其指定一个父级类加载器对象或者默认采用系统类加载器做为其父级类加载器.每个类加载器加载时,又先委托给其上级类加载器,叫做类加载器的委托机制.
 
代理
为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能。
要为系统中各种接口的类增加扩展功能,那将需要太多的代理类。但我们发现如果能将这类扩展功能独立出来,生成代理类的过程其实是重复且简单的,而Java正好提供了可以在 JVM 运行期动态生成出类的字节码这种技术,可以把生成代理类这个重复的过程独立出来,这就是动态代理技术。
 
上一篇:java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总


下一篇:从动态代理到Spring AOP(中)