Spring 代理模式【静态代理】 实例
一个静态代理的实例,用于理解代理模式;
1、业务实例:创建一个接口实现简单的增删改查:
创建一个实现类,继承上面接口,实现具体的方法:
创建一个测试类:调用实现类实现方法;
2、如果现在增加需求,要在每次调用方法的时候打印日志:如果不是用代理模式,需要修改源代码,并且在实现类中每个方法上都要加上日志的代码,如果一个接口存在多个实现类,每个实现类存在多个方法,那么要改动的代码量将是巨大的;
这时,我们使用代理模式,在不改动源代码的基础上,增加日志功能:
首先,增加一个代理类:在代理类中创建一个接口的实现类属性,并创建set方法(保证可以动态传入被代理的实现类),并实现UserService接口,重写相应的方法,这时UserServiceImpl实现类就被代理类所代理,此时只需要在代理类中加入一个日志方法,并且在重写的方法中调用一次即可;
创建一个测试类:这样不用直接调用实现类,直接调用代理类即可,并将想要代理的实现类set到代理类中,然后调用代理类响应的方法即可;
最后打印出结果:发现每次调用方法都会打印相应的日志了;
总结:代理模式的好处:
- 可以使真实角色(实现类)的操作更加纯粹,不用去关注一些公共的业务;
- 公共的业务就交给了代理角色!实现了业务的分工(耦合度降低)!
- 公共业务发生扩展的时候(不用修改原有代码),方便集中管理!
AOP的实现机制: