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框架主要由六个模块组成,在开 ...
随机推荐
- apache traffic server安装
wget http://mirrors.hust.edu.cn/apache/trafficserver/trafficserver-7.1.1.tar.bz2 tar -jxvf trafficse ...
- Centos下载安装grafana
grafana的官网下载:https://grafana.com/grafana/download 一.安装服务端图像呈现组件 # yum install -y fontconfig freetype ...
- npm 发布 vue 组件
创建 vue 组件 1.创建vue项目,为了简洁方便,推荐使用webpack-simple构建一个项目 vue init webpack-simple your-project 2.在 src 目录下 ...
- while循环练习:
输入姑娘的年龄后,进行以下判断: 如果姑娘小于18岁,打印"不接受未成年" 如果姑娘大于18岁小于25岁,打印"心动表白" 如果姑娘大于25岁小于45岁,打印& ...
- Linux安装redis,启动配置不生效(指定启动加载配置文件)
一.今天有个同学问我,为什么明明安装了redis,修改了配置,启动的时候,配置还是不生效.如下图是安装后的redis文件图. 二.想加载上图中的redis.conf,进入到src中寻找到启动文件red ...
- xmlns, xmlns:xsi, xsi:schemaLocation 解释
xmlns, xmlns:xsi, xsi:schemaLocation 解释 xmlnsxsischemaLocation 我们在写 xml 文件时,尤其是 spring .mybatis 的配置文 ...
- ps制作雾的效果
制作雾的效果 方法一: 新建图层,将前景色设置为白色,背景色为黑色(因为雾的颜色是根据前景色决定的,也可根据这个原理制作火焰效果) 选择滤镜->渲染->云彩(也可选择其他效果的云彩) (选 ...
- Python Web 服务开发者: 第 1 部分
Python Web 服务开发者: 第 1 部分 Python Web 服务世界 Python 的座右铭一向是“装备齐全”,这是指在安装该语言时会附带一大套标准库和功能程序.本文概述了在 Python ...
- springboot扫描自定义的servlet和filter代码详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 这几天使用spring boot编写公司一个应用,在编写了一个filter,用于指定编码的filter,如下: /** ...
- electron 系统托盘 单击 双击事件冲突解决方法
部分代码 // 任务栏点击事件 let timeCount = 0 tray.on('click', function (Event) { setTimeout(() => { if (time ...