其实动态代理也是代理的一种,代理分为静态代理和动态代理。
静态代理类: 由程序员创建源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理类: 动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。
为什么会出现动态类?
因为要为系统中的各种接口的类增加代理功能,那将需要太多的代理类,全部采用静态代理的方式,写成千上万的代理将是一件非常复杂的事情,所以出现了动态代理,可以很容易的生成代理。
生成动态代理的方法:
1.Jvm可以在运行期动态的生成类的字节码,这种动态的生成的类往往被用作代理类,即动态代理类
2.JVM生成的动态类必须实现一个或多个接口,所以JVM生成的动态类只能用作具有相同接口的目标类的代理。
3.CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的代理。所以可以用CGLIB库为一个没有实现接口的类生成动态代理。
|