spring学习(五):aop的设计由来之静态代理
来源:互联网 发布:微信中打开淘宝网址 编辑:程序博客网 时间:2024/06/05 17:28
静态代理:
抽象角色:一般使用接口或者抽象类实现。在这里就是rent接口
真实角色:代表干事情的人,也就是被代理的人,他不关注一些公共复杂的事情,在这里就是房东。
抽象角色:一般使用接口或者抽象类实现。在这里就是rent接口
真实角色:代表干事情的人,也就是被代理的人,他不关注一些公共复杂的事情,在这里就是房东。
代理角色: 代理真实角色的人,代理真实角色后一般会做一些附属操作,在这里就是中介。
(一)先给大家理解下什么事抽象角色,真实角色,代理角色。
1.客户租房,我们首先得找一个中介,中介对应了房东public class Client {public static void main(String[] args) {Host host = new Host();//房东Proxy proxy = new Proxy(host);//中介proxy.rent();}}2.租房接口public interface Rent {public void rent();}2.房东实现Rent接口public class Host implements Rent{public void rent(){System.out.println("房屋出租");}}3.中介实现Rent接口public class Proxy implements Rent{private Host host;//中介要房东授权才能租房,所以要引用房东public Proxy() {}public Proxy(Host host) {this.host = host;}public void setHost(Host host) {this.host = host;}//租房public void rent(){seeHouse();host.rent();fare();}//看房private void seeHouse(){System.out.println("带房客看房");}//收中介费private void fare(){System.out.println("收取中介费");}}
理解了这几个名词的含义了,肯定缺不了来一波代码。
(二)在实际程序中的作用
(1)就拿在service层添加日志来举例,我们每执行一个方法都要添加日志,这样service层就添加了和增删改查操作不相关的代码(log),并且我们必须还得重复的添加log方法,这样就违背了我们上面说的不关注一些公共复杂的业务,代码
userService接口
public interface UserService {public void add();public void update();public void delete();public void search();}
userService实现类
public class UserServiceImpl implements UserService {@Overridepublic void add() {//公共的业务----日志,安全,权限,缓存,事务等等//A.log();---分离的思想--纸质阅读器;osgi--java模块开发-spring--osgilog("add")System.out.println("增加用户");}@Overridepublic void update() {log("update")System.out.println("修改用户");}@Overridepublic void delete() {log("delete")System.out.println("删除用户");}@Overridepublic void search() {log("search")System.out.println("查询用户");}public void log(String methodName){System.out.println("执行"+methodName+"方法");}}
(2)使用静态代理之后的代码
添加静态代理
public class UserServiceProxy implements UserService{private UserService userService;public void setUserService(UserService userService) {this.userService = userService;}@Overridepublic void add() {log("add");userService.add();}@Overridepublic void delete() {//日志,安全,缓存,事务,异常处理等log("delete");userService.delete();}@Overridepublic void search() {log("search");userService.search();}public void update() {log("update");userService.update();}public void log(String methodName){System.out.println("执行"+methodName+"方法");}}
修改userService实现类,这样userService实现类就只关注他需要关注的事情
public class UserServiceImpl implements UserService {@Overridepublic void add() {//公共的业务----日志,安全,权限,缓存,事务等等//A.log();---分离的思想--纸质阅读器;osgi--java模块开发-spring--osgiSystem.out.println("增加用户");}@Overridepublic void update() {System.out.println("修改用户");}@Overridepublic void delete() {System.out.println("删除用户");}@Overridepublic void search() {System.out.println("查询用户");}}
好处:使得真实角色要处理的业务很纯粹,不再去关注一些公共复杂的事情,租房就只租房,不用搞其他的,公共的业务由代理完
成,我们知道在dao层有很多事情是公共的,比如增,删,改都要加上事务,还有就是service层需要加日志,这种繁琐重复的事情,
假如每次增,删,改操作我们都要加事务,这样就很麻烦。加上静态代理就能使公共业务扩展变得更加集中。
缺点:增加了代理类,工作流变大了,开发效率太低了,所以就出现了动态代理。
0 0
- spring学习(五):aop的设计由来之静态代理
- Spring AOP 学习之静态代理
- java学习之路----静态代理---动态代理-----AOP的前奏(AOP也是动态代理)
- Spring(AOP静态代理)
- spring aop学习5:jdk静态代理
- spring-aop入门之静态代理模式
- Spring学习(五)之AOP
- web学习笔记19-静态代理,动态代理,spring AOP
- spring学习之五(spring aop编程)
- spring框架学习(八)—静态代理、JDK与CGLIB动态代理、AOP+IoC
- Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
- Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
- 动态代理和静态代理以及spring的aop
- 动态代理和静态代理以及spring的aop
- Spring学习笔记之aop动态代理(3)
- Spring AOP 学习之cJlib动态代理
- Spring学习历程 --- AOP基础之代理
- Spring AOP(1),静态代理
- 逆天!安卓正式超越 Windows 成世界第一大操作系统
- 安装pip2、pip3
- 字符串 截取 替换
- 线程的清理处理程序pthread_cleanup_(线程六)
- 走吧
- spring学习(五):aop的设计由来之静态代理
- VB 使用键值对存取数据
- 对RxJAVA的理解
- mysql 开启自动提交
- java 常用集合类总结
- Docker在Windows上,微软使用DevOps重塑自己
- mysql 每天每个客户第一个报告
- 懂商业的技术合伙人(10):伟大的乔帮主,从不滥用绝学'降龙十八掌'
- [BZOJ 4883][Lydsy2017年5月月赛]棋盘上的守卫:最小生成树