一、Spring是什么

Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系

二、为什么要使用Spring

1. 降低组件之间的耦合度,实现软件各层之间的解耦。  Controller –> Service –> DAO

2. 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。

3. 容器提供单例模式支持,开发人员不再需要自己编写实现代码。

4. 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。

5. 容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。

6. Spring对于主流的应用框架提供了集成支持,如:集成mybaties,Hibernate、JPA、Struts等,这样更便于应用的开发。

三、Spring的核心及其组成

1. 核心就是提供一种新的机制管理业务对象及其依赖关系。IoC(Inversion of Control 控制反转)/ DI (Dependency Injection依赖注入),AOP(面向切面编程)。

1.1 IoC: Inversion of Control (控制反转) : 就是把要在程序中实例化的对象配置到文件中,在程序中不用new来产生,而是让容器通过配置文件返回一个给你,好处就是当需要更改业务逻辑时,方便替换对接口的不同实现类。

1.2 AOP: Aspect Oriented Programming (面向切面编程) 用来在系统中提升业务的分离,把日志、安全、事务等东西和核心业务分离开,甚至核心业务都不知道它们的存在。基本实现就是对相关的方法进行拦截,添加所需的处理动作。

2.  Spring的七大组成模块

四、Spring的特点

1. 轻量级:轻量级是针对重量级容器(EJB)来说的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的资源也很小,所以可以在小型设备中使用。

2. 非入侵式:Spring目标是一个非入侵式的服务框架。原因是所有框架都是提供大量的功能供用户去使用,从而简化开发时间和成本,但由于大量的使用了框架的API,使应用程序和框架发生了大量的依赖性,无法从框架中独立出来,更加无法使程序组件在其他程序 中使用。

3. 容器:

3.1 Spring提供了容器功能,容器可以管理对象的生命周期、对象与对象间的关系、我们可以通过编写XML来设置对象关系和初始值,这样容器在启动之后,所有的对象都直接可以使用,不用编写任何编码来产生对象。

3.2 Spring有两种不同的容器:

3.2.1 Bean工厂(org.springframework.beans.factory.BeanFactory)是最简单的容器(是Spring基本的IOC容器),提供了基础的依赖注入支持

3.2.2 应用上下文(org.springframework.context.ApplicationContext)建立在Bean工厂基础之上,提供了系统构架服务

4. IoC / DI

4.1 Spring最核心的概念就是IoC(控制反转,所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。 ),而他的另一个名字就是DI(依赖注   入,所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。 )。

4.2 使用Spring我们不必在程序中维护对象的依赖关系,只要在XML中设定,Spring容器会自已根据相关的配置去产生他们之间的关系,相当于所有的关系都是在容器运行的时候注入的,而本身他们的关系是没有的。

5. AOP

5.1 Spring最被人重视的另一个方面就是对AOP的支持,其实AOP只是Spring支持的一个子容器

5.2 AOP在一个服务流程中插入与业务逻辑无关的系统服务逻辑,如:日志、权限验证、异常处理、事务等,而把这些独立出来设计成一个对象,这样的对象称为Aspect。

6. 持久层:Spring提供了对持久层的整合,如对JDBC的使用加以封装简化,提供事务功能,对ORM工具如Hibernate等的整合。

7. Web框架整合:Spring也提供了Web的MVC解决方案,可以很好的善用IOC和AOP的功能,可以轻松的替换掉View层,如使用JPS,也可以使用熟悉的web容器,如struts技术与spring整合。

Spring系列(一):Spring的基本概念及其核心的更多相关文章

  1. Spring系列(七) Spring MVC 异常处理

    Servlet传统异常处理 Servlet规范规定了当web应用发生异常时必须能够指明, 并确定了该如何处理, 规定了错误信息应该包含的内容和展示页面的方式.(详细可以参考servlet规范文档) 处 ...

  2. Spring系列之Spring常用注解总结 转载

    Spring系列之Spring常用注解总结   传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.x ...

  3. Spring系列(零) Spring Framework 文档中文翻译

    Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...

  4. Spring系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...

  5. Spring系列(一) Spring的核心

    Spring 简介 Spring 是一个开源轻量级企业应用架构,目的是为了简化企业级应用开发.(1)Spring 框架可以帮我们管理对象的生命周期,帮助我们管理对象间的依赖关系,相互协作:(2)Spr ...

  6. 【Spring系列】Spring mvc整合redis(非集群)

    一.在pom.xml中增加redis需要的jar包 <!--spring redis相关jar包--> <dependency> <groupId>redis.cl ...

  7. Spring 系列之Spring常用注解总结

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.实物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...

  8. Spring系列(六) Spring Web MVC 应用构建分析

    DispatcherServlet DispatcherServlet 是Spring MVC的前端控制器名称, 用户的请求到达这里进行集中处理, 在Spring MVC中, 它的作用是为不同请求匹配 ...

  9. 【Spring系列】Spring IoC

    前言 IoC其实有两种方式,一种是DI,而另一种是DL,即Dependency Lookup(依赖查找),前者是当前软件实体被动接受其依赖的其他组件被IOc容器注入,而后者是当前软件实体主动去某个服务 ...

  10. 【Spring系列】Spring AOP面向切面编程

    前言 接上一篇文章,在上午中使用了切面做防重复控制,本文着重介绍切面AOP. 在开发中,有一些功能行为是通用的,比如.日志管理.安全和事务,它们有一个共同点就是分布于应用中的多处,这种功能被称为横切关 ...

随机推荐

  1. COMPILING ACTIONSCRIPT 3.0 WITH SUBLIME TEXT 2

    At Clock we typically spend our time developing JavaScript and PHP, however, occasionally Flash pres ...

  2. Java 编程下简介 Class 与类加载

    即使有一个类并对它一无所知,但其实它本身就包含了许多信息,Java 在需要使用到某个类时才会将类加载,并在 JVM 中以一个 java.lang.Class 的实例存在.从 Calss 实例开始,可以 ...

  3. ksoap2调用webservice传递参数丢失

    参数有顺序要求,顺序设置正确即可.

  4. ubuntu14 安装 端口转发工具rinetd

    1,下载  第一中方式 用 apt-get install rinetd  或者从官网下载http://www.boutell.com/rinetd/ 2,配置,端口转发的配置在 /etc/rinet ...

  5. 旧的flex

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. js判断是否安装flash player及当前版本 和 检查flash版本是否需要升级

    一.js检查flash版本升级 for (var i = 0, len = navigator.plugins.length; i < len; i++) { var plugin = navi ...

  7. python版本坑:md5例子(python2与python3中md5区别)

    对于一些字符,python2和python3的md5加密出来是不一样的. Python2 和Python3MD5加密 # python2.7 pwd = "xxx" + chr(1 ...

  8. GBDT 迭代决策树

    GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决 ...

  9. Android创建并响应选项菜单

    创建options menu 之前提到,Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menu  ...

  10. 我为什么要学Go语言

    # 我为什么要学Go语言 ### 公司的强烈推荐---之前也了解过Go语言并没有觉得有什么了不起,Go能做的其他语言都能做. ### 网上查找学习Go语言的理由---网上大体有两类人,一类说Go是大公 ...