虽然静态代理需要手动的去创建,但动态代理也需要我们去实现InvocationHandler。
问题描述:
课程中提及"作为静态代理他哪都好,但是不灵活,因为我们有一个目标类就要去创建至少一个代理类,如果系统的目标类很多的话,这些代理类也会变得非常的复杂"。
但是这对于动态代理难道不是一样的么?我们对于不同的目标类有不同的需求,我们就需要对InvocationHandler进行各种不同实现。如果未来有扩展,我们还得去修改实现InvocationHandler类的源代码,而静态代理可以直接嵌套完成扩展不需要触碰源码的修改。
这样的话,动态代理不是和静态代理一样,有多少目标类就要多少适配相关需求的实现,只不过一个是直接手写了代理类实现,一个是通过JDK提供的反射类InvocationHandler对目标类进行增强需要我们手动的去实现InvocationHandler并手动的来启动自动生成代理类。
那这样看,动态代理没有对于静态代理的优势啊。请问我的理解有误吗?如何理解动态代理是比静态代理更有优势呢?(感觉上动态代理比静态代理写了更多的代码,结构也没有静态代理直白,也不能嵌套?)
(谢谢老师)
正在回答
同学你好,当多个类需要拓展的业务逻辑不同时,使用静态代理和使用动态代理本质上是没有区别的,都是要手动书写代理类代码。但是当多个类需要拓展的业务逻辑相同的时候,静态代理依然必须逐一进行拓展,但是动态代理就可以通过反射使用一个类就完成拓展了。
另外,动态代理也是可以进行嵌套的,如下代码中,第一行就是创建了委托类的实现类对象,所以实质上和静态代理一样,也是持有了委托类的实例。当使用动态代理嵌套时,只需要将这里进行替换即可。
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星