SSM框架.docx
- 文档编号:26844225
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:7
- 大小:101.25KB
SSM框架.docx
《SSM框架.docx》由会员分享,可在线阅读,更多相关《SSM框架.docx(7页珍藏版)》请在冰豆网上搜索。
SSM框架
SSM框架
1什么是SSM框架?
spring+springmvc+mybatis
2Spring容器
2.1这里有两个概念:
spring和springmvc。
那么这两个概念有什么区别?
spring是IoC和AOP的容器框架。
springmvc是一种Web框架。
2.2spring主要功能是控制反转(IoC)和依赖注入(DI)。
控制反转是将控制权交给容器,由容器决定动态注入。
调用类依赖于接口,而不依赖具体的实现类,实现了解耦合。
依赖注入是一种设计模式,是作为控制反转的一种实现模式(还有其他实现方式)。
依赖注入就是将实例变量传入到调用类的对象中去。
2.3工厂模式:
不关心接口是如何实现的,就可以创建该接口的实例对象。
工厂模式的简单理解:
通过接口实现解耦。
通过耦合实现调用。
工厂模式的耦合:
通过接口调用方法。
接口是死的,对其方法的调用是死的。
工厂模式的解耦:
调用哪一个目标实现类、怎样调用方法(对目标对象方法的实现)。
>>简化代码
要知道,工厂的目的之一就是创建目标对象(耦合)。
而工厂的实现类的作用就是创建不同的目标接口的实现类的实例。
这个模式是固定的,那么我们可以让程序针对不同的目标接口的实现类
自动创建相应的工厂实现。
(比较低级的做法可以是:
在相应的目标接口的实现类中创建其对应工厂实现类对象的匿名内部类。
)
2.4代理模式:
通过代理可以实现对工厂实现类的统一管理
工厂模式无法对一系列工厂实现类进行统一的管理。
代理模式可以解决这个问题。
工厂对象接口的实现类–实现了工厂对象的接口。
代理–实现了工厂对象接口。
并提供了工厂接口注入。
工厂生产方法–提供了工厂实例的注入接口。
那么,可以这样:
工厂对象接口的实现类们注入到代理类中,代理类注入到工厂生产方法中。
其中,代理实现了工厂对象接口。
那么它是怎样实现的?
其实,代理相当于一个平台,它提供了工厂接口的注入。
它虽然实现了工厂接口,但它不自己调用其中的方法,而是通过注入的工厂接口的实现类去调用其中的方法。
2.5动态代理:
通过反射动态地创建代理
由上可知:
代理的作用就是实现对工厂实现类的统一管理。
什么统一管理呢?
就是将额外的操作从实现类们中分离,实现对实现类们的统一处理。
传统代理的局限性:
要代理的目标对象的接口是死的,只能实现对一种目标对象进行统一管理(包括调用目标对象中的方法)。
但是我们知道,统一管理这些操作可以与目标对象分离开来,实现解耦。
这就是动态代理。
动态代理是如何实现的呢?
动态代理类,通过实现InvocationHandler这样一个处理器接口,即可实现动态代理。
那么InvocationHandler处理器是怎么做的呢?
首先需要知道你要对哪一类或哪几类对象们(即接口列表)进行代理,
然后需要知道,你要对这些对象们进行怎样的代理(即动态代理类),
此外,还需要接口的类加载器。
(类加载器的作用就是读取该类的字节码文件,创建该类的对象。
因为反射获取构造器有局限性,此处不用反射创建该代理实现类)。
有了这三个条件,InvocationHandler处理器就可以动态地创建相应的代理类对象。
2.6Spring对aop的实现
日后更新。
事务管理器、通知、aop等
3mybatis框架
MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架。
3.1Mybatis做了些什么?
Mybatis是持久层框架,主要处理数据库的交互。
3.2怎么搭建Mybatis框架
3.2.1逆向工程
逆向工厂根据单表生成po类,mapper,mapping映射文件。
3.2.2手动编写
po类、mapper、mapping文件。
根据dataBase的映射关系编写实现对数据库的增、删、改、查等操作。
3.3po类
主要包括数据库中各个表(table)的基本映射类;
基本映射类的扩展类(如ItemsCustom)
自定义pojo包装类(如ItemsQueryVo)
3.4mapper映射接口
即dao层。
此层主要包含对数据库的操作(接口)。
3.5mapping映射文件
这里主要包含了对数据库的具体操作
3.6sqlSessionFactory
俗称session工厂,在mybatis中可以由SqlSessionFactoryBuilder创建。
在spring容器中,可以由SqlSessionFactoryBean创建。
session工厂的作用:
连接数据库,并扫描mybatis的配置文件和mapping映射文件。
这里使用了一个Singleton设计模式。
SqlSessinFactory的目的是什么?
dataBase1<->sqlSession(S)
dataBase2<->sqlSession(S)
dataBaseN<->sqlSession(S)
不同的数据库则需要不同的SqlSessionFactory。
而通常情况下,只专注于对一个dataBase进行操作,所以这里我们Singleton模式。
3.7sqlSession
当获得一个session时,可以用它来执行映射语句,提交和回滚链接。
当你不需要它时,可以关闭它。
如果与spring整合,spring会将sqlSessionFacroy提供给mapperFactoryBean(提供操作数据库方法的的接口)。
那么,spring能够通过sqlSessionFacroy创建一个或多个线程安全的sqlSession,注入给mapperFactoryBean。
为此,不再需要直接使用sqlSession。
3.8mapperFactoryBean
spring提供了一个动态代理的实现。
这个动态代理类可以让你通过动态代理类创建不同mapper代理类,实现对mapper接口中方法(包含操作数据库方法)的调用。
注意,这个sqlSession是线程安全的,而且可以根据spring事务配置自动提交、回滚和关闭session。
3.9Service层
mapperFactoryBean创建mapper代理类。
service层调用mapper代理类完成各种事务操作。
4springmvc框架
springmvc是一种web层的框架。
其目的是将web层的Controller与页面的View联系起来。
4.1web层怎么解析?
页面部署到tomcat容器中,tomcat容器获取中DispatcherServlet(前端控制器),然后使用DispatcherServlet去解析页面。
除了前端控制器(Servlet),还有监听器、Filter过滤器等。
比如post请求乱码过滤器。
4.2DispatcherServlet前端控制器
前端控制器,并不自己去解析webView页面。
而是读取配置文件,获取里面的处理器适配器和处理器映射器,视图解析器,异常处理器等。
通过他们来处理View。
前端控制器是怎么实现的?
4.2.1定义了很多解析器、适配器和映射器…的成员变量,此外还有资源配置文件的成员变量。
它定义这么多变量,目的就是方便自己调用和提供给别的类调用。
4.2.2为了方便自己调用,它必须对这些定义好的成员变量进行赋值:
1.通过setter()方法注入。
(public由其他类调用)
让其实现类去设置true或false。
比如此处的ThrowException的默认值就是false。
2.通过initxxx方法注入。
(然后在另一个地方直接调用它,private不需要重写或者被调用)
这里通过读取配置文件applicationContext,对存在的成员变量初始化。
具体操作:
使用BeanFactoryUtils将context与成员变量HandlerMapping映射成bean对象。
如果该bean对象不为空,那么使用getBean()方法生成HandlerMapping。
3.提供了部分解析器getter方法,以便其他类可以获取该成员变量。
4.3处理器映射器(HandlerMapping)
作用:
就是将url与controller或者controller方法相互映射。
类似于servlet的一种拦截器,拦截到此url就交给该项目相应的controller方法处理。
形成一种映射关系。
许多这样的映射关系就形成了handlerMappings。
4.4处理器适配器(HandlerAdapter)
适配器模式:
保持了原接口的完整性。
减少了不必要的实现,提高代码的编写效率。
拥有自己独特的实现方式。
(耦合)
提供一个接口,可以处理一系列该接口实现类。
或者可以被继承,由子类重写其部分方法。
(解耦)
上面的SimpleControllerHandlerAdapter就是对HandlerAdapter的实现。
怎么实现的呢?
它仅针对Controller类型的处理器,并对该类处理器一些自己的处理。
(耦合)
可以处理一系列Controller类型的处理器,返回ModelAndView。
(解耦)
4.5视图解析器(ViewResolver)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSM 框架