MVC、Spring
一、SSM简介
SSM框架,是Spring + Spring MVC + MyBatis的缩写,Spring依赖注入DI来管理各层的组件,使用面向切面编程AOP管理事物、日志、权限等。SpringMVC代表了Model(模型)View(视图)Controller(控制)接收外部请求,进行分发和处理。Mybatis是基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来。
/ | 好处 |
---|---|
MyBatis | 统一提取sql、对象关系映射 |
Spring MVC | 简化servlet、简化视图映射 |
Spring | 团队的沟通桥梁、协作者 |
二、MVC设计概述
M 代表 模型(Model)
模型是什么呢? 模型就是数据,就是 dao,bean
V 代表 视图(View)
视图是什么呢? 就是网页, JSP,用来展示模型中的数据
C 代表 控制器(controller)
控制器是什么? 控制器的作用就是把不同的数据(Model),显示在不同的视图(View)上,Servlet 扮演的就是这样的角色。
MVC 模型
首先用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。
MVC原理图
三、Spring
Spring是一个当前Java EE轻量级框架,目的是使现有技术更加易用。Spring的诞生是为了满足企业级系统的一些需求,那么,Spring究竟带来了那些好处呢?
引入Spring之后,Spring的依赖注入可以统一管理和生成javabean,哪有需要调用就往哪注入,这种方式大大降低了开发难度,降低了代码的耦合度,给后期的维护也带来了方便。
同时spring的AOP还能将系统中那些类似于日志管理,事务等分布性比较强,但又必须有的代码集中生成,无需开发人员关注,提高工作效率。
1、Spring的两大核心
依赖注入(IoC)(简化java类)、AOP(统一提起公用代码)
2、Spring的主要内容
1、IoC容器
2、 AOP实现
3、数据访问支持:简化JDBC/ORM框架(Hibernate、Mybatis)、声明式事务。
4、Web集成
3、Spring的体系结构
从这个图中我们可以看出Spring框架的核心组件只有三个:Core、Context和Beans。
他们构建起了整个Spring的骨骼架构,没有他们就不可能有AOP、Web等上层的特性功能。上面这些是Spring特性功能。
其中比较重要的几个包:
AOP包(主要提供面向切面编程的实现);
Web(主要提供了Web应用开发的支持及针对Web应用的MVC思想实现) 、ORM(为Hibernate、Mybatis这类持久化框架提供支持);
还有Spring MVC(这个是它自带的一个web视图层,可以替代到Sturts2)。
Spring最最核心的就是AOP和下面Spring核心包,也是我们学习的重点。
4、Spring核心技术
Spring 两大核心技术:
1、 控制反转(IoC:Inversion of Control ),也叫依赖注入(DI:Dependency Injection )。
2、 面向切面编程(AOP:Aspect Oriented Programming)
Spring三个核心组件
Spring三个核心组件(Core、Context、Beans),Beans最为核心
5、Spring的优点
总结起来,Spring作为一个开源的轻量级的IOC和AOP容器框架,具有以下优点:
1、低侵入式设计:非入侵式设计,基于Spring开发的应用一般不依赖于Spring的类
2、独立于各种应用服务器,真正实现:一次编写,到处运行。
3、Spring的依赖注入特性使Bean与Bean之间的依赖关系变的完全透明,降低了耦合度:使用SpringIOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑。
4、它的面向切面编程(AOP)特性允许将一些通用任务如安全、事务、日志等进行集中式处理。
5、并且它还提供了与第三方持久层框架的良好整合,并简化了底层数据库访问。
6、高度的开放性(可以和Struts2、Hibernate、MyBatis、CXF等很多主流第三方框架无缝整合)。
四、控制反转(依赖注入)
什么是控制反转
将组件对象的控制权从代码本身转移到外部容器。
组件化的思想:分离关注点,使用接口,不再关注实现。
依赖的注入:将组件的构建和使用分开。
当某个角色(比如一个java实例,调用者)需要另一个角色(另一个java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但是在spring里,创建被调用者的工作不再由调用者来完成。因此被称为控制反转;创建被调用者实例的工作通常由spring容器来完成,然后注入调用者,因此也称为依赖注入。这样给程序带来很大的灵活性,这样也实现了我们的接口和实现的分离。
简而言之也就是说我们要获得一个对象,不由我们开发者自己创建,而是由我们的容器来注入给我们的程序来使用。