MVC简介
MVC:MVC(Model-View-Controller)设计模式的基本思想是数据、显示和处理相分离。
Model负责数据管理,View负责数据显示,Controller负责业务逻辑和响应策略。
三层架构(3-tier Architecuture)是将整个业务应用划分为:界面层、业务逻辑层、数据访问层。
在 J2EE 中,最典型的 MVC 就是 Jsp + Servlet + JavaBean 模式。
优点:分层,结构清晰,耦合性低,大型项目代码的复用性得到极大的提高,开发人员分工明确,提高了开发的效率,维护方便,降低了维护成本。
缺点:简单的小型项目,使用 MVC 设计反而会降低开发效率,层和层虽然相互分离,但是之间关联性太强,没有做到独立的重用。
Srping是什么
Spring是一个开源框架,为简化企业级应用开发而生。Spring的核心是控制反转(IoC)和面向切面编程(AOP),简单来说,Spring是一个分层的JavaSE/EE一站式(Full-Stack)轻量级容器框架。
JavaSE和JavaEE是什么
JavaSE是java分类中的标准版,是刚接触java要学习的基础知识。
JavaEE是java分类中的企业版,是java中的高级,涉及到的知识广泛。
JavaME中M是Micro的缩写,用在嵌入式等电子设备中。
Spring的特点
Spring 的特征如下:
- 轻量:从大小与处理开销两方面而言, Spring 都是轻量的;此外, Spring 是非侵入性的( Spring 应用中的对象不依赖于 Spring 的特定类)。
- 容器: Spring 包含并管理应用对象的配置和生命周期。
- 框架: Spring 可以将简单的组件配置、组合成为复杂的应用。在 Spring 中,应用对象被声明式地组合,典型地是在一个 XML 文件里。
- 一站式:在 IoC 和 AOP 的基础上, Spring 可以整合各种企业应用的开源框架和优秀的第三方类库,但不仅仅限于整合,Spring 框架本身就是一个企业解决方案级别的框架(实际上 Spring 自身也提供了表示层的 Spring MVC 和持久层的Spring JDBC )。
- 控制反转( Inversion of Control,缩写为 IoC ): Spring 通过控制反转的技术促进了低耦合。当应用了 IoC ,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象,也可以说,依赖被注入到对象中(依赖注入, Dependency Injection ,缩写为 DI )。
- 面向切面( Aspect-Oriented Programming,缩写为 AOP ): Spring 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
耦合度:各模块间相互联系程度的一种度量,耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强;反之则越弱。
Spring的组成模块
- Spring Core:Spring Core 提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory ,它是工厂模式的实现。 BeanFactory 使用控制反转( IoC )模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
- Spring Context:Spring Context是一个配置文件,向Spring框架提供上下文信息。Spring Context包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
- Spring AOP:通过配置管理特性, Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中,可以很容易地使 Spring 框架管理的任何对象支持 AOP 。 Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务,通过使用 Spring AOP ,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
- Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDB C的异常遵从通用的 DAO 异常层次结构。
- Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO 、 Hibernate 和 iBatis ,所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
- Spring Web:Spring Web 模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。Spring 框架支持与 Struts 的集成,Spring Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
- Spring Web MVC:Spring Web MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,Spring MVC 框架变成为高度可配置的, MVC 容纳了大量视图技术,其中包括 JSP 、 Velocity 、 Tiles 、 iText 和 POI ;模型由 JavaBean 构成,存放于 Map ;视图是一个接口,负责显示模型;控制器表示逻辑代码,是 Controller 的实现。 Spring MVC 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。 Spring MVC 框架的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象,毫无疑问,这样的对象可以在不同 J2EE 环境( Web 或 EJB )、独立应用程序、测试环境之间重用。
IoC & DI(参考如链接)
理解参考跟我学Spring3
控制反转(Inversion of Control)不是技术,而是一种设计思想,IoC意味着你将设计好的对象交给容器控制,而不是传统的在对象内部之间控制。
- 在传统的JavaSE程序设计中,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是专门一个容器来创建这些对象,即由IoC容器来控制对象的创建;
IoC容器控制了对象,主要控制了外部资源获取(不只是包括对象比如文件等)
- 何为反转? 有反即有正,传统应用程序是由我门自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转是容器来帮忙创建、查找及注入依赖对象,对象只是被动的接受依赖对象。
依赖对象的获取被反转了
**依赖注入(Dependency Injection)**是组件之间依赖关系由容器在运行期决定,即由容器动态的将某个依赖关系注入到组件之中。DI并非为了软件系统带来更多的功能,而是为了提升组建重用的频率。
- 谁依赖谁? 应用程序依赖IoC容器。
- 为什么需要依赖? 应用程序需要IoC容器来提供给对象需要的外部资源。
- 谁注入谁? IoC容器注入应用程序某个对象,应用程序依赖的对象。
- 注入了什么? 注入某个对象依赖的外部资源。
相对IoC而言,依赖注入明确描述了被注入对象依赖IoC容器配置依赖对象。