當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring学习9之静态代理再理解
生活随笔
收集整理的這篇文章主要介紹了
Spring学习9之静态代理再理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、代理是什么?
代理的概念:
生活中的代理是很常見的,比如代購、律師、中介等,他們都有一個共性就是幫助被代理人處理一些前前后后的事情。而被代理人只需要專注做自己要做的那部分事情就可以了。
Java中的代理也是類似的,代理模式可以實現幫助被代理者完成一些前期的準備工作和后期的善后工作,但是核心的業務邏輯仍然是由被代理者完成。
二、使用步驟
代碼步驟:
1.接口
⒉真實角色
3.代理角色
4.客戶端訪問代理角色
下面以(偽)數據庫增刪改查為例子:
1.需要的類
業務的接口
package com.shan.demo02;public class Client {public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();Proxy proxy = new Proxy();proxy.setUserService(userService);proxy.add();proxy.delete();proxy.update();proxy.query();}}業務的實現類
package com.shan.demo02; //改變業務代碼在公司是大忌,因為你改動代碼可能讓整個項目崩潰 public class UserServiceImpl implements UserService{@Overridepublic void add() {System.out.println("增加了一個用戶");}@Overridepublic void delete() {System.out.println("刪除了一個用戶");}@Overridepublic void update() {System.out.println("修改了一個用戶");}@Overridepublic void query() {System.out.println("查詢了一個用戶");} }客戶類
package com.shan.demo02;public class Client {public static void main(String[] args) {UserServiceImpl userService = new UserServiceImpl();Proxy proxy = new Proxy();proxy.setUserService(userService);proxy.add();proxy.delete();proxy.update();proxy.query();}}代理類
package com.shan.demo02; //使用代理輸出一個日志,不改變原有業務的代碼 public class Proxy implements UserService{private UserServiceImpl userService;public void setUserService(UserServiceImpl userService) {this.userService = userService;}@Overridepublic void add() {log("add");userService.add();}@Overridepublic void delete() {log("delete");userService.delete();}@Overridepublic void update() {log("update");userService.update();}@Overridepublic void query() {log("query");userService.query();}//日志輸出public void log(String msg){System.out.println("[Debug]使用了" + msg +"方法");} }2.解析
客戶想要對數據庫進行修改,可是客戶他不會,于是客戶找到了幫他做這個app的程序員(代理類),程序員來幫他完成對數據庫的修改,程序員還可以干自己的事情,程序員為了能更加清楚的知道他使用了數據庫的哪個方法,于是他有加了一個日志輸出,沒有改變原有的業務代碼,不會影響到業務。
最終客戶只要找到代理類,去調用代理的方法就能完成對數據庫的修改,而不需要直接面向這個數據庫!并且代理類能有他自己的事情(加一個日志輸出),不會影響業務!
這就是代理的作用!
總結
優點
- 可以使真實角色的操作更加純粹!不用去關注一些公共的業務
- 公共業務交給了代理,實現了業務的分工
- 公共業務發生拓展時,方便集中管理
缺點:
- 一個真實的角色就會產生一個代理,代碼量翻倍,開發效率降低
作者有話說
博客創作不易,希望看到這里的讀者動動你的小手點個贊,如果喜歡的小伙伴可以一鍵三連,作者大大在這里給大家謝謝了。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Spring学习9之静态代理再理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring学习8之静态代理
- 下一篇: Spring学习11之AOP