Spring系列(一):Spring核心概念
一、Spring概念
Spring是一种多层的J2EE应用程序框架,其核心就是管理资源组件以及依赖关系,Spring框架为现代基于java的企业应用程序提供了一个全面的编程和配置模型。
二、Spring核心组件

1.Core Container
Core Container包含了spring-core, spring-beans, spring-context, spring-context-support, spring-expression (Spring Expression Language) 模块,spring-core和spring-beans模块提供了框架的基本部分,包括IoC(控制反转)和DI(依赖项注入)特性。Context模块模构建于Core和Beans模块基础之上,提供了一种类似JNDI注册器的框架式的对象访问方法;Context 模块继承了Beans的特性,为 Spring 核心提供了大量扩展,添加了对国际化(例如资源绑定)、事件传播、资源加载和对Context的透明创建的支持。Context模块同时也支持J2EE的一些特性,ApplicationContext接口是Context模块的关键;SpEL模块提供了强大的表达式语言,用于在运行时查询和操纵对象。
2.AOP and Instrumentation
spring-aop模块提供了一个AOP规范的面向切面的编程方式,允许您定义方法拦截器和切入点,以便处理一些横切性问题,比如日志,权限,数据验证,监控性能等。Aspects模块提供了对AspectJ的支持;Instrumentation模块提供了class instrumentation支持和classloader实现,使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机监控和Java类操作了,这样的特性实际上提供了一种虚拟机级别支持的 AOP 实现方式(这块涉及到javaagent后续章节介绍)。
3.Messaging
Spring消息模块,其中包含来自Spring集成项目的关键抽象,如Message、MessageChannel、MessageHandler等,可以作为基于消息的应用程序的基础。
4.Data Access/Integration
Data Access/Integration包含了JDBC, ORM, OXM, JMS, 和Transaction模块,spring-jdbc模块提供了一个JDBC抽象层,消除了对特定于数据库供应商的错误代码进行冗长的JDBC编码和解析的需要;spring-tx模块支持对实现特殊接口的类和所有pojo的编程和声明性事务管理;spring-orm模块为目前流行的对象关系映射api(包括JPA和Hibernate)提供集成层。使用spring-orm模块,您可以将所有这些ORM映射框架与Spring提供的所有其他特性结合使用,比如前面提到的简单声明性事务管理特性;spring-oxm模块提供了一个抽象层,支持对象/XML映射实现,如JAXB、Castor、XMLBeans、JiBX和XStream;spring-jms模块(Java消息传递服务)包含用于生成和消费消息的特性。
5.Web
Web层由spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet模块组成,spring-web模块提供了基本的面向web的集成特性,比如多部分文件上传功能,以及使用Servlet侦听器和面向web的应用程序上下文初始化IoC容器;Spring -webmvc模块(也称为Web- servlet模块)包含Spring的模型-视图-控制器(MVC)和Web应用程序的Rest Web服务实现;spring-webmvc- Portlet模块(也称为Web-Portlet模块)提供了要在Portlet环境中使用的MVC实现,并反映了基于servlet的spring-webmvc模块的功能。
6.Test
Spring -test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。它提供了Spring applicationcontext的一致加载和这些上下文的缓存。它还提供了模拟对象,您可以使用这些对象独立写单元测试代码
三、Spring核心
核心就是管理资源组件及其依赖关系。包括IoC(Inversion of Control 控制反转)/ DI (Dependency Injection依赖注入),Aop(Aspect Oriented Programming面向切面编程)。
1.IoC
IoC(Inversion of Control 控制反转):资源(组件)不再由使用资源双方进行管理,而是由不使用资源的第三方统一管理,这样带来的好处。第一,资源的集中管理,实现资源的可配置和易管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度
2.AOP
Aop(Aspect Oriented Programming面向切面编程):我们知道OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分,如果在应用开发过程中,如果产生横切性问题,比如日志记录,权限验证,监控性能等,这个时候AOP就上场了,AOP是通过预编译方式或者运行期动态代理实现的一种方式,AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
四、Spring容器类继承图

Spring系列(一):Spring核心概念的更多相关文章
- Spring系列(七) Spring MVC 异常处理
Servlet传统异常处理 Servlet规范规定了当web应用发生异常时必须能够指明, 并确定了该如何处理, 规定了错误信息应该包含的内容和展示页面的方式.(详细可以参考servlet规范文档) 处 ...
- Spring系列之Spring常用注解总结 转载
Spring系列之Spring常用注解总结 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.x ...
- Spring的俩大核心概念:IOC、AOP
1.Spring 有两个核心部分: IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给 Spring 进行管理 (2)Aop:面向切面,不修改源代码进行功能增强 2.Spring 特点 ...
- Spring系列(零) Spring Framework 文档中文翻译
Spring 框架文档(核心篇1和2) Version 5.1.3.RELEASE 最新的, 更新的笔记, 支持的版本和其他主题,独立的发布版本等, 是在Github Wiki 项目维护的. 总览 历 ...
- Spring系列之Spring常用注解总结
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- Spring系列(一) Spring的核心
Spring 简介 Spring 是一个开源轻量级企业应用架构,目的是为了简化企业级应用开发.(1)Spring 框架可以帮我们管理对象的生命周期,帮助我们管理对象间的依赖关系,相互协作:(2)Spr ...
- Spring系列之——Spring事务以及两大核心IOC和AOP
1 Spring事务 1.1 Spring事务是什么(百度) 事务是对一系列的数据库操作(比如插入多条数据)进行统一的提交或是回滚操作,如果插入成功,那么一起成功,如果中间一条出现异常,那么回滚之前的 ...
- 【Spring AOP】AOP核心概念(二)
1. 横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点. 2. 切面(aspect)-- 本质上仅仅是一个类 类是对物体特征的抽象,切面就是对横切关注点的抽象. 3. 连接点 ...
- 【Spring系列】Spring mvc整合redis(非集群)
一.在pom.xml中增加redis需要的jar包 <!--spring redis相关jar包--> <dependency> <groupId>redis.cl ...
- Spring 系列之Spring常用注解总结
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.实物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...
随机推荐
- CPU缓存和内存屏障
CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 多级缓存 ...
- 法国神器"mimikatz"简化版,一键导出结果
神器之所以称之为神器.那是闹着玩的? 法国神器"mimikatz",那是相当的好使!!! GitHub:https://github.com/gentilkiwi/mimikatz ...
- 实现markdown功能
前言 由于个人一直想弄一个博客网站,所以写博客的功能也就必须存在啦,而之前想过用富文本编辑器来实现的.但是接触了markdown后,发现真的是太好玩了,而且使用markdown的话可以在博客园.CSD ...
- 如何正确使用Profibus插头以及终端电阻
插头与终端电阻在Profibus通讯中有着非常重要的作用,它们使用起来非常简单,没有很多复杂的设置:但是正是由于使用简单,使得很多工程师在使用当中忽略了一些细节,导致很多通讯问题. 1 Profibu ...
- Autocad2017破解版下载|Autodesk Autocad 2017中文破解版下载 64位(附注册机/序列号)
Autocad2017是Autodesk公司开发的自动计算机辅助设计软件,可用于二维绘图.详细绘制.设计文档和基本三维设计,它具有良好的用户界面,允许用户通过交互菜单或命令行方式来进行各种操作,包括图 ...
- Atlassian In Action-Jira之核心配置(二)
道生一,一生二,二生三,三生万物. --<道德经> 如果说第一节的指导思想是管理之"道",那我们本节的核心配置就是Jira系统之"道"了.有了核心配 ...
- CDQZ集训DAY2 日记
依然很爆炸. T1上来有50分暴力分,打完后注意到了后50分的随机数据,开始想怎么去对付他.然后就开始思考随机数据意味着什么.想了想,想打一个扫描线或者分治.决策了一下还是打了一个扫描线+链表.然而只 ...
- CMinpack使用介绍
github: https://github.com/devernay/cminpack 主页: http://devernay.github.io/cminpack/ 使用手册: http://de ...
- 最新 centos7下zabbix 监控redis状态
准备 先准备两台服务器,已经部署好了zabbix-sever和zabbix-agent zabbix-server 192.168.1.70 centos7.2 zabbix-agent 192.16 ...
- 【题解】Unit Fraction Partition-C++
Description给出数字P,Q,A,N,代表将分数P/Q分解成至多N个分数之和,这些分数的分子全为1,且分母的乘积不超过A.例如当输入数据为2 3 120 3时,我们可以得到以下几种分法: In ...