1.定义一个代理接口和实现类
2.定义一个静态代理类
3.测试类
静态代理类优缺点
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
2.动态代理
(1)JDK动态代理
动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理
1)JDK 在运行时注入
本质:在内存中构建出接口的实现类
特点:被代理对象,必须有接口
(2)cglib动态代理
Cglib 底层,注入,编译期已经注入了
本质:在内存中生成被代理类(目标类)的【子类】
特点:可以在没有接口的情况下代理
对于不使用接口的业务类,无法使用JDK动态代理,cglib采用非常底层的字节码技术,可以为一个类创建子类