聊完了工厂模式,下面我们来说Spring框架中的另一个核心设计模式——代理模式(Proxy Pattern)。
代理模式
大家可以先不用看概念,先举个吃饭的例子:比如说我们想吃饭,我们可以选择自己做饭吃、去饭店吃、叫外卖吃。如果我们选择自己做着吃,我们就需要去买菜、做饭、吃饭、吃完饭还要刷碗。其实我们真正想做的就只有吃饭而已,其他的都是与业务无关,但是又不得不做的事。但是我们叫外卖就不一样了,外卖小哥会把饭送到我们手里,吃完饭我们也不需要刷碗,直接把包装扔掉就可以了,我们这里先不讨论环保的问题。这里的外卖小哥就相当于是我们的代理。代理我们去饭店,或者买菜的过程。
有了代理我们就可以更专注于我们真正要做的事--吃饭。代理可以帮我们把一些脏活累活全都干了。
在我们写代码过程中那些是脏活累活呢?
举个最简单的例子:在JDBC中,当我们完成数据库操作之后,我们还要关闭一堆Connection、Statement、ResultSet而且每个都还要判空,还要捕获异常,要多麻烦有多麻烦。有了代理我们就可以把这些都交给代理去做,自己只做最核心的业务逻辑就可以了。
当然代理模式还有一些其他的用途:
- 日志管理;
- 事务控制;
- 权限管理;
那么有人就会问了:代理模式最终不是还是得我们自己实现吗?既然这样,我们直接将这些逻辑直接写在代码内部反而更简单了呢?
这就涉及到两种代理模式的分类:静态代理和动态代理。虽然他们的理论都是一致的,但是在实现方式上面却迥然不同。
静态代理: 每当我们想代理一个类,我们就要为这个类创建一个相应的代理类,让它在我们的业务基础上做一些琐碎的事,但是这就像上面的朋友的疑问一样,我们直接将这些逻辑直接写在代码内部反而更简单。但是这并不代表静态代理就是一无是处。至少他做到了,业务代码与其他代码的分离。并且静态代理也是我们理解动态代理的基础。
动态代理:通过Java反射的方式为一批具有相同代理逻辑的类动态的创建代理,这样可以大大的提高了我们的开发的效率。主要分为JDK代理和CGlib代理。但是它也有缺点,那就是实现太过于复杂。
但是Spring框架却为我们克服了动态代理的缺点,使我们不需要在考虑动态代理的编写,而是为我们自动生成动态代理,让我们开发变得更加如鱼得水。下一篇我们就直奔我们的主题具体聊聊我们的Spring框架,看它是如何做到的。
还是那句话,这里只是记录我个人的理解,如果大家需要更加深入的了解可以参考菜鸟教程.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。