这里代理模式的实现有两种:静态代理模式,JDK动态代理模式
静态代理模式:
实现方式为定义一个公共的接口,不管是实现类还是代理类都实现该接口,要在实现类上加上一个代理模式,那么在代理模式里封装该实现类的实例,那么在代理类里做具体的事情。如安全性检查则可以在调用实现类的每个方法前加上安全检查的方法。
定义接口和其实现类以及代理类:
UserService接口
UserServiceImpl实现类(实现UserService接口)
UserServiceImplProxy代理类(实现UserService接口)
写个测试类看看效果:
静态代理的缺点就是每个不同的实现如果要用到代理的话,得有自己的接口以及专有的代理类继承该接口,麻烦且费事,有没有可以统一的代理模式呢?这样大家就共用这样一个代理类呢?JDK动态代理可以实现该功能,使代理变得更简单了。
JDK动态代理:
实现方式是建立一个统一的代理模型类SecurityHandler,该类继承自InvocationHandler。里面得有生成代理类的方法和调用具体实现的方法。
建立SecurityHandler代理模型类:
借用前面的UserService接口和实现类UserServiceImpl。
开始写一个测试类吧:
这些都是我们手动的方式实现代理的,不过Spring帮我们做了这样的事情,我们就可以不用费心管理这些麻烦的事,参考Spring之AOP篇