目录
动态代理
代理就是被代理者没有能力或者不愿意去完成某件事情,需要找个人代替自己去完成这件事,动态代理就是用来对业务功能(方法)进行代理的。
关键步骤:
1.必须有接口,实现类要实现接口(代理通常是基于接口实现的)。
2.创建一个实现类的对象,该对象为业务对象,紧接着为业务对象做一个代理对象。
案例1:
找明星唱歌:
1.定义一个Skill接口,写出唱歌、跳舞功能。
2.定义一Star实现Skill,并完成相关功能。
3.设计一个方法来返回一个明星对象的代理对象。
4.定义一个测试类,调用方法。
结果:
案例2:
模拟某企业用户管理业务,需包含用户登录,用户删除,用户查询功能,并要统计每个功能的耗时。
1.定义一个UserService表示用户业务接口,规定必须完成用户登录,用户删除,用户查询功能。
2.定义一个实现类UserServiceImpl实现UserService,并完成相关共能。
3.通过一个静态方法,为用户业务对象返回一个代理对象
4,定义一个测试类,开始测试。
原理:
结果
动态代理的优点:
1.非常灵活,支持任意接口类型的实现类对象做代理,也可以直接俄为借口本身做代理。(看下面代码)
2.可以为被代理对象的所有方法做代理。
3.可以在不改变方法源码的情况下,实现对方法功能的增强。
4.不仅简化了编程工作、提高了软件系统的可扩展性,同时也提高了开发效率。
增加泛型使其可以为任意接口类型的实现类对象做代理。