Spring 初识
一、Spring是什么?
首先可以进入Spring官网 https://spring.io/ 看一下相关介绍。
Spring为开发者提供了一站式的轻量级应用开发平台。简单来说,Spring为开发者提供了一系列的开发工具和框架,减少重复造轮子,方便开发,提高开发效率。
需要注意的是Spring不单单是一个开发框架,而是一个应用开发平台,包含了多个子项目。常见的有:
- Spring Framwork
- Spring boot
- Spring cloud
- Spring Security
- ...
Spring类似于计算机的操作系统,为企业级应用开发提供了平台支撑,主要抽象了企业级应用开发中可能遇到的共性问题,提供了一套统一的解决方案。
下图为Spring的整体架构图。
Spring分为三个层次,分别是core、component、application,即核心、组件和应用三个层次。Spring Core 是 Spring 的核心,主要包含 Spring IoC 和 Spring AOP,是其他Spring模块实现的基础。Spring Component 包含各种基于Spring Core常用开发组件,比如Spring MVC能够加快Web应用开发;Spring JDBC 封装了基本的数据库操作,还提供了对常见ORM的封装,能够使应用方便使用数据库。Spring Application 包含了Spring 平台中的一些其他子项目,比如提供安全功能的Spring Security等。
Spring的学习也以这三个层次为主线展开。核心是掌握Spring Core 和 Spring Component 的使用和实现。通过阅读和分析Spring框架源码,理解Spring设计思想,更好地指导我使用Spring开发。Spring源码中涉及大量的设计模式使用,阅读过程中需要了解常见的设计模式。
二、Spring IoC 概述
IoC(Inversion of Control)即控制反转,也叫DI(Dependence Injection)依赖注入。IOC要解决的是对象依赖的问题,优秀的系统主要通过对象间协作配合实现相关功能,系统中存在大量的对象依赖关系,传统的方式是通过依赖者直接管理其依赖的对象,会导致代码高度耦合和可测试性降低,依赖对象修改,调用对象也需要相应修改。IOC通过使用容器统一管理应用中对象和对象间的关系,某对象如果依赖其他对象,需要从IOC容器获取目标依赖对象。通过使用容器统一管理对象和对象依赖关系,极大地简化了应用开发和维护。
IoC可以以图书馆作为类比,通常我们要阅读书籍,通常需要购买并保管书,但是对于大部分人来说购买和保管的成本较高,可能有些人只是最近暂时想阅读相关书籍,没必要去购买,或是只是想阅读相关书籍,以后可能也不会看了,也没必要自己长久保存。针对这种情况,图书馆就发挥作用了,我们可以从图书借书,看完再归还,书籍由图书馆统一管理,读者省去了很多烦扰。简而言之,每个读者不需要独立购买和保管想看的书籍,交由图书馆统一管理,这就是一种IoC的模型。

三、Spring AOP 概述
AOP是Aspect-Oriented Programming 的简称,中文意思是面向切面编程。AOP本质上是一种模块化机制,将分散在应用中的用于解决特定领域问题的代码抽取成单独的模块,统一维护。同时应用中业务逻辑代码和用于解决特定领域问题的代码之间的关系将通过AOP中切面来封装、组织和维护。比如对于日志功能,在应用中的各个地方都会用到,一般都是通过直接调用日志模块的相关方法,打印相关日志,这样会导致日志功能代码和业务逻辑代码显示耦合在一起,虽然能控制打印内容,但不能灵活控制日志执行场景,比如在哪个方法中执行,在方法的那个阶段执行等。通过使用AOP能够灵活地实现这些功能。Spring AOP是针对AOP的一种解决方案,主要通过动态代理的方式实现对代码的拦截并切入相关功能。

Spring 初识的更多相关文章
- 菜鸟学习Spring——初识Spring
一.概念. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...
- Spring初识(通过小实例清晰认识Spring)
1.spring架构: spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,iba ...
- spring初识
Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的.Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益. Sp ...
- Java使用Spring初识
1.首先是引用了,然后pom.xml如下: <dependency> <groupId>org.springframework</groupId> <arti ...
- [Spring]初识Spring-Spring的基础使用-如何通过Bean来实例化?
Spring框架的基础使用 XML配置信息,Bean的不同实例化方式,注入 实例化 XML文件中的参数设置 1.通过构造器进行实例化(重点,常用方式) <bean name="aCls ...
- [Spring]初识Spring-Spring是什么?如何实例化一个Spring容器?
关于Spring入门的基础知识点 Spring简介 Spring是由Rod Johnson创建的轻量型容器,目的在于简化企业级开发.是一种容器框架 a.降低侵入性 b.提供了IOC(控制反转)和AOP ...
- Day2 Spring初识(二)
Bean的实例化 bean实例化方式有3种:默认构造.静态工厂.实例工厂 默认构造 调用无参构造, 属性+setter User.java package entity; public class U ...
- Day1 Spring初识(一)
在网上看到一篇文章,感觉写得挺不错的,转载一下,本文转载自:http://www.cnblogs.com/xdp-gacl/p/3707631.html和http://www.cnblogs.com/ ...
- Spring初识、新建工程
1.spring与三层架构的关系: spring负责管理项目中的所有对象,是一个一站式的框架,容器中的对象决定了spring的功能. 2.spring核心架构 Spring框架主要由六个模块组成,在开 ...
随机推荐
- IMAPd - Internet 邮件存取协议服务器
总览 /usr/etc/imapd 描述 imapd 是个支持 IMAP4rev1 远程邮件存取协议(由RFC2060定义)的服务器. imapd 是由internet服务器(参见 inetd(8)) ...
- 数据结构之查找(图片来源,老师PPT)
顺序查找进行遍历元素,进行查找 总计全部比较次数为:1+2+…+n = (1+n)n/2 若求某一个元素的平均查找次数,还应当除以n(等概率), 即: ASL=(1+n)/2 ,时间效率为 O(n) ...
- 转载:PHP编程规范
PHP-FIG 在说啥是PSR-[0-4]规范的之前,我觉得我们有必要说下它的发明者和规范者:PHP-FIG,它的网站是:www.php-fig.org.就是这个联盟组织发明和创造了PSR-[0-4] ...
- Linux安装redis,启动配置不生效(指定启动加载配置文件)
一.今天有个同学问我,为什么明明安装了redis,修改了配置,启动的时候,配置还是不生效.如下图是安装后的redis文件图. 二.想加载上图中的redis.conf,进入到src中寻找到启动文件red ...
- c语言获取系统时间并格式化
// #include <time.h> int GetAndFormatSystemTime(char* timeBuff) { if (timeBuff == NULL) { retu ...
- ZROI 19.08.02 计算几何
1.向量基础知识 \(atan2\)可以求极角,但是不是特别精确,在坐标接近\(10^{9}\)时会出锅,安全的做法是叉积. 旋转.反射和平移等都可以抽象为矩阵,即,它们可以复合.(需要一些必修四知识 ...
- vue2.0 监听滚动 锚点定位
vue中监听滚动的方法其实可以用: // Chrome document.body.scrollTop // Firefox document.documentElement.scrollTop // ...
- vue-awesome-swiper 轮播图使用
最近在做vue 的轮播图的问题,项目中也遇到一些问题,查了 swiper 官网资料, 还有vue-awesome-swiper的文案,最后把怎么使用这个插件简单的说下,啥东西都需要自己实践下,还是老规 ...
- 对url给后台传数据的时候特殊字符需要转义
URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符,汉字,特殊符号等等,所以要对URL进行转换.这个过程就叫做URL编码,或者叫U ...
- DevExpress.XtraGrid.Views.Grid.GridView
private void SetView() { GridView gridView = (GridView)this.DefaultView; if (gridView != null) { gri ...