随笔分类 - Java基础
摘要:和MyBatis系列不同的是,在正式开始Spring入门时,我们先来了解两个关于Spring核心的概念,IoC(Inverse of Control)控制反转和AOP()面向切面编程。 1.IoC(Inversion of Control)控制反转 什么是控制反转呢?可以这么通俗的来解释,我们通常写
阅读全文
摘要:可以说每个MyBatis都是以一个SqlSessionFactory实例为中心的。SqlSessionFactory实例可以通过SqlSessionFactoryBuilder来构建。一是可以通过XML配置文件的方式来构建SqlSessionFactory,二是可以通过Java API的方式来构建。
阅读全文
摘要:MyBatis的Configuration配置中有一个Plugin配置,根据其名可以解释为“插件”,这个插件实质可以理解为“拦截器”。“拦截器”这个名词不陌生,在众多框架中均有“拦截器”。这个Plugin有什么用呢?活着说拦截器有什么用呢?可以想想拦截器是怎么实现的。Plugin用到了Java中很重
阅读全文
摘要:关于在MyBatis中的ObjectFactory有什么用,在官方文档中有这样的描述(大多数网上的博客都是直接引用这一描述):MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,
阅读全文
摘要:在大学写web应用的时候经常会遇到这么个问题,当我要插入一条数据,某个数据是Date类型,数据库中却是VARCHAR类型,这个时候可能会傻乎乎的先把这个数据自己手动转换成String类型再插入到数据库中,其实大可不必。MyBatis为我们提供了更好的方法即是TypeHandler来应对Java和jd
阅读全文
摘要:Druid是阿里巴巴的一个数据库连接池开源框架,准确来说它不仅仅包括数据库连接池这么简单,它还提供强大的监控和扩展功能。本文仅仅是在不采用Spring框架对Druid的窥探,采用目前最新版本druid1.0.26 github地址:https://github.com/alibaba/druid。
阅读全文
摘要:什么是不可变的对象呢?我们都知道String是不可变的,如果有涉及大量的字符串拼接我们最好不要用String,虽然我们在代码中可以这样写: 这样写是没有错的,这是不是和我们所说的String类型时不可变的违背了呢?其实不然,我们这里看到str“改变”了值,其实不是不是真正改变了,而是改变了str的引
阅读全文
摘要:发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系。 什么是发布?简单来说就是提供一个对象的引用给作用域之外的代码。比如return一个对象,或者作为参数传递到其他类的方法中。 什么是逸出?如果一个类还没有构
阅读全文
摘要:这是23种设计模式的最后一个——访问者模式,这个模式确实不怎么好理解,不怎么好用,而且实际中也很少用到这个设计模式。《大话设计模式》中就提到GoF四个人中有一个说过:“大多数时候你并不需要访问者模式,但当一旦你需要访问者模式时,那就是真的需要它了。”我们先来说说访问者模式运用到什么场景中,它适用于数
阅读全文
摘要:解释器模式,简单来讲就是一个简版的编译器,如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。解释器模式能对一些较频率执行的文法转换为一种特定的文法类型,不过解释器模式也有其不足,就是如果文法较为复杂的话,就得需要将每一个文法转换成至少一个类,如果包含
阅读全文
摘要:享元模式核心掌握的一点就是——共享。如果一个程序代码中存在大量细粒度的对象,而这些大量的对象造成了很大的存储开销时就应该考虑使用。例如一个博客网站,每个人根据自己的账号登录自己的博客,此时每个“博客类”就应该成为共享,这也称为内部状态,但每个人博客里的数据又不同,这时用不同的账号区分也即是称为外部状
阅读全文
摘要:学了这么多的设计模式,离真正的实际运用还有很长的路要走,理论是理论,理论结合实践才有用。今天继续吧,继续一个学习一个新的设计模式——中介者模式。 中介在现实生活中非常常见,比如你要租一个房子,可能你不会和房东直接接触而是通过中介来完成一系列繁琐的过程。中介者模式就是这样的存在,如果一个类需要调用另一
阅读全文
摘要:所谓职责链模式,其实在现实中非常常见,比如你要提出一个申请,首先可能通过你的组长,你的组长没有权力审批时会上报到经理,经理没有权力审批时上报到总监,总监没有没有权力审批时上报到总经理等等,以此类推直到有权力的管理者来审批。 这种场景我们可以用if-else判断分支来实现,不过记住大量的if-else
阅读全文
摘要:当学了这个命令模式后,又一次体会到编程的艺术,明明一个看似很简单的事,却要用“复杂”的方法来实现,就像在之前我多次说到的,其实并不是“复杂”,并不是“难”,而是自己基本功太弱,这些看似“复杂”的设计并不是故弄玄机卖弄,仔细学习过后才发现之精妙。比如今天要说的命令模式,书中举的例子非常典型。去路边摊买
阅读全文
摘要:桥接模式要把握的很重要的一点就是:类的继承关系和类的组合/聚合关系,何时应该考虑使用何种关系。是不是在编程过程中一味地使用类的继承关系就代表这就是面向对象编程了?有时候并不是这样,Java的类继承设计成单继承模式我想应该就是不想把类的继承关系搞得过于复杂,实际上我们应该优先使用对象组合/聚合,而不是
阅读全文
摘要:之前我们实现了迭代器模式,很多编程语言实际上已经内置了迭代器类,比如Java就为我们实现了迭代器Iterator。我们首先来看Iterator中的源码。 通过JDK源码我们发现Iterator是一个接口,包含三个方法:hasNext、next、remove。 Iterator是一个接口,那如何来创建
阅读全文
摘要:今天要说的迭代器模式,实际上就是Java已经为我们实现好了,那就是Java的Iterator类。包括很多编程语言也有自己的迭代器类,但同时它也是一个设计模式,所以在我们实现迭代器模式的时候实际上就是在实现一个迭代器类。 我们先来了解何为迭代器?其实你把它简单理解为for循环也没什么问题,可以说是它是
阅读全文
摘要:备忘录模式,望文生义就知道它是用来做备忘的,或者可以直接说是“备份”。当需要保存当前状态,以便在不久要恢复此状态时,就可以使用“备忘录模式”。将当前”状态“备份,是不是又new一个类,然后将每个字段方法copy过去就可以了呢?或者说使用我们之前clone方法做深复制浅复制呢?其实不然,在《大话设计模
阅读全文
摘要:适配器模式其实很简单,或者说学了设计模式到现在,虽然每次看到各种名字的设计模式就觉得很高端,但当真正了解过后才知道其实也没有那么玄乎,有的东西在我们平时的时候都已经用到过了。比如这次我们要说的适配器模式,说白了,就是以前的代码接口,和我们客户端需要调用的接口不一致,但以前代码功能又是我们想要的功能。
阅读全文
摘要:今天要说的设计模式——状态模式,个人觉得非常有意思,因为此种设计模式的运用场景几乎可以说是每个程序里都可以用上。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。定义一般来说都是晦涩难懂的。我们同样来通俗一点解释,首先解释这种模式的运用场景,这种模式一般用在有大量if-else
阅读全文