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