来谈谈 Java 反射机制,动态代理是基于什么原理?
1 一些概念 首先我们来看一些概念性的描述: 注解(Annotation) :也叫元数据。一种代码级别的说明。它是JDK 1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 反射 :赋予程序在运行时自省(introspect)的能力。 指的是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性。 动态代理 :是一种 方便运行时动态处理代理方法调用的机制 。很多场景都是利用类似机制,比如:用来包装RPC调用、面向切面编程(AOP) AOP :面向切面编程。在不影响原有功能的情况下,对程序进行横向扩展。说说我自己的理解吧。某个类的方法已经封装好了,现在我们要对原有的方法进行干预,但是又不能破坏原来的类,这时候就需要aop的思想,把这个切点扩展成一个面来进行操作。( 也就是生成该类的代理,对代理进行操作 ) 依赖注入(控制反转) :Spring是通过反射来实现依赖注入的。什么是依赖呢? 如果在A类里面调用B类,那么A类需要依赖于B类,通常的话,是A类来创建B类的示例。但是spring 里面,创建的动作由spring容器来完成,然在在运行的时候注入到A类中,所以叫做依赖注入。比如说注解@Resource和@Autowired等