对于Java开发者来说,Spring肯定是一个避不开的技术。所以准备系统的学下Spring框架。

我给自己设计的学习路线是这样的:首先阅读下Spring的官方文档(注意Spring官网上有很多项目,Spring的基础框架是Spring FrameWork这个项目),记录我认为重要的内容,方便后续回顾;到这边对Spring已经有了基本的认识,然后是找一到两本关于Spring源码的书,深入学习下Spring框架的原理性内容;最后是对于Spring的关键特性单独写博客记录,其实也就是对第二步的记录,你看了源码分析之后会对Spring的实现原理也有些了解。这些东西你不记录的话会很快遗忘。博客是一个很好的记录和分享自己所学的工具。所以后续我会对Spring的启动过程、自动注入、AOP和Spring MVC这些我之前看起来很高级的特性单独写博客记录。

本博客是学习路线的第一步,是对Spring官方文档的记录。主要是熟悉Spring框架有哪些功能,基本的使用方式是怎样的。由于Spring FrameWork的官方文档比较长,所以分模块来记录了,本博客是Spring FrameWork核心技术部分的记录,基于5.2.6版本.关于这个版本相对于之前版本的更新,请点击连接查看。


简介

Spring是一个轻量级的Java Bean容器,这个容器为应用程序的开发提供了基础框架(基础功能)的支持,让开发人员能够关注业务逻辑的开发,大大了提升开发效率。Spring提供的基础功能非常广泛,包括核心的IOC、AOP、资源访问、国际化、数据绑定和SpEL表达式,还有对Web的支持(Spring MVC),各种数据库的支持(spring-data),以及对各种第三方框架集成的支持(spring-Integration)(jms、定时任务、邮件等)。

The Spring Framework is a Java platform that provides comprehensive infrastructure support for developing Java applications. Spring handles the infrastructure so you can focus on your application.

但是传统的Spring应用开发有个弊端,就是配置过于繁琐。为了简化Spring应用程序的开发,现在Spring团队推出了Spring Boot项目,支持自动配置,内嵌Web容器等核心功能,可以大大简化Spring应用的开发。SpringBoot因此也越来越流行。对于越来越流行的微服务,Spring也提供了Spring Cloud解决方案。

本博客覆盖了Spring最重要的功能IOC和AOP。首先介绍IOC功能,讲完IOC后会详细讲解AOP。Spring框架有它自己的AOP实现,基本已经能够解决企业开发中对AOP80%的需求。另外,Spring也提供了和AspectJ集成的功能。如果Spring的AOP实现不能满足你的需求,可以考虑使用AspectJ。

依赖注入和控制反转概念

使用Spring必然会接触到这两个概念。

  • 控制反转:对象创建的控制权由应用程序转移到Spring容器。举个例子:以前新建一个对象我们要在应用程序主动new一个对象,并给对象的属性赋值,使用Spring的情况:容器负责对象的创建管理。
  • 依赖注入:所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。如果不使用IOC容器的话,可能需要我们通过构造函数在初始化类的时候注入(Spring的官方文档解释:一个应用程序往往是由许多类组成的,那类和类之间又会有很多依赖关系。所谓依赖注入就是说Spring在初始化管理一个类的时候会同时将这个类依赖的类注入进入(初始化))

Spring模块

整个Spring框架被分成许多个小的模块,每个模块负责专门的功能。

Spring的整个IOC容器功能由spring-core, spring-beans, spring-context, springcontext-support,和spring-expression这几个模块提供。

  • spring-core, spring-beans这两个模块实现了最基本的IOC容器功能(IOC、依赖注入)。容器的基础接口BeanFactory就是在这两个模块中实现的;
  • spring-context和spring-context-support模块提供了ApplicationContext的实现,扩展了基础容器的功能;
  • spring-expression:提供了对表达式语言的支持;
  • spring-aop和spring-aspects:提供了对面向切面的支持;
  • spring-instrument和spring-instrument-tomcat:Spring对Web服务器的支持;
  • spring-messaging,spring-jms:对信息体系结构和协议的支持
  • spring-jdbc、spring-orm、spring-oxm、spring-tx、spring-jms:提供数据获取方面的支持;
  • spring-web, spring-webmvc, spring-websocket, 和springwebmvc-portlet提供Web相关的支持;
  • spring-test提供测试相关支持。

Maven依赖

为了防止版本号混乱,Spring提供了简便方式使用依赖

    <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>5.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> //在父pom中加入上面依赖后,就可以像下面这样使用,不需要指定版本号
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependencies>

Spring日志

Spring中使用JCL进行日志输出。熟悉JCL的人知道JCL只是一个日志门面,我们可以自己选择日志实现框架。JCL默认的日志实现框架是log4j,使用起来很方便,只需要加入下面的依赖并且在classpath下面加入log4j.properties就可以了。

<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>

如果想使用Log4j 2.x作为日志的实现框架,加入下面依赖,并且在classpath下加入log4j2.xml

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.6.2</version>
</dependency>
</dependencies>

如果我们不想使用JCL作为日志的门面,可以这样添加依赖,这样Spring框架中的日志就会路由到SLF4J这个日志门面中去了。

//使用slf4j作为日志的门面,使用logback作为日志的实现框架
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
</dependencies>

IOC和DI的概念,以及Spring框架的介绍的更多相关文章

  1. 解读超轻量级DI容器-Guice与Spring框架的区别【转载】

    依赖注入,DI(Dependency Injection),它的作用自然不必多说,提及DI容器,例如spring,picoContainer,EJB容器等等,近日,google诞生了更轻巧的DI容器… ...

  2. Spring框架的介绍

    1.Spring框架的结构 由持久层.表现层.中间模块和测试层组成. 持久层:和数据接触.事务管理 表现层:对数据进行处理 中间模块:核心功能 测试层:用来测试完整度 核心功能介绍 1.1  控制反转 ...

  3. Spring框架简单介绍

    原文地址:  http://my.oschina.net/myriads/blog/37922 1.使用框架的意义与Spring的主要内容 随着软件结构的日益庞大,软件模块化趋势出现,软件开发也须要多 ...

  4. 关于spring的IOC和DI的xml以及注解的简单介绍

    xml 一 目的:通过ApplicationContext对象的getBean方法获取所需类的对象. 编写一个service类 public class service { private Strin ...

  5. 一、IOC和DI的概念

    IOC---Inversion of Control (控制反转) 在java中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你对象内部直接控制. 谁控制谁,控制什么  -->IOC ...

  6. 01 Spring框架 基本介绍

    相信学习java,并且走Web道路的道友都应该知道Spring的大名,它的地位相信也不需要我在这里多说什么,接下来的文章就Spring的配置和使用来进行一些讲解. 首先学习框架我们都要考虑和做到以下几 ...

  7. Spring+IOC(DI)+AOP概念及优缺点

    Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...

  8. spring框架学习(一)——IOC/DI

    什么是Spring框架: Spring是一个基于IOC和AOP的结构J2EE系统的框架: IOC 反转控制 是Spring的基础,Inversion Of Control,简单说就是创建对象由以前的程 ...

  9. 转载百度百科上的强回复,关于spring的IOC和DI

    IoC与DI   首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...

随机推荐

  1. 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...

  2. Java实现 LeetCode 680 验证回文字符串 Ⅱ(暴力)

    680. 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: " ...

  3. Java实现 LeetCode 295 数据流的中位数

    295. 数据流的中位数 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2. ...

  4. java实现矩阵变换加密法

    一种Playfair密码变种加密方法如下:首先选择一个密钥单词(称为pair)(字母不重复,且都为小写字母),然后与字母表中其他字母一起填入至一个5x5的方阵中,填入方法如下: 1.首先按行填入密钥串 ...

  5. 用户管理命令-passwd

    passwd可以给用户设置密码或者修改密码,超级用户可以修改任何用户的密码,而且可以不遵守密码的复杂性原则,普通用户只能修改自己的密码,必须遵守密码的复杂性原则 passwd [选项] 用户名 常用选 ...

  6. Django如何上传图片并对上传图片进行访问

    通过一个示例的完整演示过程,来学习django如何上传图片,以及对于media文件夹中的上传图片进行请求: 1.配置settings.py MEDIA_URL = '/media/' MEDIA_RO ...

  7. Oracle 11g RAC之HAIP相关问题总结

    1 文档概要 2 禁用/启用HAIP 2.1 禁用/启用HAIP资源 2.2 修改ASM资源的依赖关系 3 修改cluster_interconnects参数 3.1 使用grid用户修改ASM实例的 ...

  8. JVM中堆的介绍

    一.堆的概述 一个JVM实例只有一个堆内存,堆也是Java内存管理的核心区域,堆在JVM启动的时候创建,其空间大小也被创建,是JVM中最大的一块内存空间,所有线程共享Java堆,物理上不连续的逻辑上连 ...

  9. 关于领域驱动设计 DDD(Domain-Driven Design)

    以下旨在 理解DDD. 1.     什么是领域? 妈妈好是做母婴新零售的产品,应该属于电商平台,那么电商平台就是一个领域. 同一个领域的系统都有相同的核心业务. eg: 电商领域都有:商品浏览.购物 ...

  10. win10 设置开机启动VMware虚拟机并打开指定镜像

    1.设置win10开机启动应用 把应用程序的‘快捷方式’放到“系统启动文件夹”里即可. 2.开机启动VMware虚拟机并打开指定镜像 a.右键VMware Workstation快捷方式,看属性 b. ...