Spring,SpringMvc,MyBatis用到的设计模式
1.MyBatis:
首先看MyBatis执行流程:
(1)首先,SqlSessionFactoryBuilder 去读取 mybatis 的配置文件,然后 build 一个 DefaultSqlSessionFactory。
(2)当我们获取到 SqlSessionFactory 之后,就可以通过 SqlSessionFactory 去获取 SqlSession 对象
(3)拿到 SqlSession 对象以后就可以调用 SqlSession 中一系列的 select..., insert..., update..., delete...方法轻松自如的
进行 CRUD 操作了。
MapperProxy:在 mybatis 中,通过 MapperProxy 动态代理咱们的 dao, 也就是说, 当咱们执行自己写的 dao 里面的方法的时候,其实是对应的 mapperProxy 在代理。那么,咱们就看看怎么获取 MapperProxy 对象吧:MapperProxyFactory 的动态代理,咱们就可以方便地使用 dao 接口。
- *Builder模式,例如SqlSessionFactoryBuilder(加载mybatis配置文件时创建SqlSessionFactory)、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder(在mybatis初始化mapper映射文件的过程中,为<cache>节点创建Cache对象);
- *工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
- *单例模式,例如ErrorContext和LogFactory;
- 代理模式,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
- 组合模式,例如SqlNode和各个子类ChooseSqlNode等;
- 模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;
- *适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
- 装饰者模式,Cache接口的实现有多个,但是大部分都是装饰器,只有PerpetualCache提供了Cache接口的基本实现,其他的装饰器都是在PerpetualCache的基础上提供了一些额外的功能,通过各种组合后满足一个特定的需求。;
- 迭代器模式,例如迭代器模式PropertyTokenizer;
2.Spring:
1.工厂模式: Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建 bean 对象。 BeanFactory :延迟注入(getBean的时候才会注入),相比于BeanFactory来说会占用更 少的内存,程序启动速度更快。 ApplicationContext :容器启动的时候,不管你用没用到,一次性创建所有 bean 。2.单例模式: Spring 中 bean 的默认作用域就是 singleton(单例)的。 注解:@Scope(value = "singleton")3.代理模式: AOP中:JDK,CGLIB两种动态代理,
4.模板模式: jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类
5.装饰器模式wrapper : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
6.观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
7.适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式,与之相关的接口是
<strong>AdvisorAdapter</strong>,Spring预定义的通知要通过对应的适配器,适配成 <code>MethodInterceptor
接口(方法拦截器)类型的对象。 spring MVC DispatcherServlet
根据请求信息调用 HandlerMapping
,解析请求对应的 Handler
。解析到对应的 Handler
(也就是我们平常说的 Controller
控制器)后,开始由HandlerAdapter
适配器处理。HandlerAdapter
作为期望接口,具体的适配器实现类用于对目标类进行适配,Controller
作为需要适配的类。观察者模式:
是一种对象行为型模式。它表示的是一种对象与对象之间具有依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会做出反应。Spring 事件驱动模型就是观察者模式很经典的一个应用。Spring 事件驱动模型非常有用,在很多场景都可以解耦我们的代码。比如我们每次添加商品的时候都需要重新更新商品索引,这个时候就可以利用观察者模式来解决这个问题。
Spring事件流程:
定义一个事件: 实现一个继承自 ApplicationEvent,并且写相应的构造函数; 定义一个事件监听者:实现 ApplicationListener 接口,重写 onApplicationEvent() 方法; 使用事件发布者发布消息: 可以通过 ApplicationEventPublisher 的 publishEvent() 方法发布消息。
Spring AOP 和 AspectJ AOP 有什么区别?
Sprin.g AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。
Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比Spring AOP 快很多。
3.SpringMVC:
*责任链模式:
DispatcherServlet这个核心类中使用到了HandlerExecutionChain这个类,他就是责任链模式实行的具体类。组合模式: DelegatingWebMvcConfiguration类*适配器模式: HandlerAdapter接口策略模式: DispatchServlet中的初始化组件中,用到了getDefaultStrategies方法,来决定不同组件的默认类型以实现组件的初始化操作。建造者模式: springMVC在构建UriComponents的内容时,就用到了建造者模式
转载至:https://www.cnblogs.com/crazy-lc/p/11848893.html