Spring框架-概述与IOC入门

Spring概述

介绍

Spring是一个开源框架,spring是于2003年兴起的轻量级java开发框架,由Rod Johnson创建,简单来说是一个分层的JavaSE/EE 一站式轻量级的开源框架。

轻量级的DI和AOP容器框架

(1)DI:称作依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。但是在spring中创建被调用者将不再有调用者完成,因此叫控制反转。创建被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入。

(2)面向切面编程是面向对象编程的有力补充。面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而获得步骤之间的逻辑划分。

一站式框架:有SE/EE开发的每层的解决方案

(1)WEB层:SpringMVC

(2)Service层(业务层): Spring的Bean管理,Spring声明式事务

(3)DAO层(持久层):Spring的Jdbc模板,Spring的ORM模块

Spring优点

1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑

2.可以提供众多服务,事务管理,WS等。

3.AOP的很好支持,方便面向切面编程。

4.对主流的框架提供了很好的集成支持,如Hibernate,Struts2,JPA等

5.Spring DI机制降低了业务对象替换的复杂性。

6.Spring属于低侵入,代码污染极低。

7.Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部

Spring入门(IOC)

IOC概念

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。即将对象的创建权反转(交给)Spring。

Spring的下载与下载文件的介绍

下载

下载地址:https://repo.spring.io/release/org/springframework/spring/5.1.9.RELEASE/>

或通过本文链接进行下载

链接:https://pan.baidu.com/s/1XTyCXmUnlDuRcN6pQp37iQ
提取码:em19

目录介绍

下载解压之后的文件目录

在这里插入图片描述

eclipse创建WEB项目

引入jar包

开发包

本文主要对Spring的IOC进行讲解,而IOC是Spring体系中的核心容器这块的内容。

所以将核心容器的jar包导入到工程中即可。

下图为Spring的体系结构

在这里插入图片描述

核心容器简单介绍:

1)spring-core:依赖注入IoC与DI的最基本实现

2)spring-beans:Bean工厂与bean的装配

3)spring-context:spring的context上下文即IoC容器

4)spring-expression:spring表达式语言

如下图所示导入以下jar包

在这里插入图片描述

日志包

在Spring的开发的过程中是需要日志记录的,所以在进行导包的操作的时候需要导入日志记录的包。在Spring的解压目录里面没有Spring的日志包,需要从Spring依赖包中进行寻找添加。

Spring依赖包下载

(1)官方下载地址

http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.0.2.RELEASE-dependencies.zip

(2)百度云盘下载地址

链接:https://pan.baidu.com/s/1hyiK0OuzMh7QvRQCmGpy9A
提取码:4gni

提醒:在spring 3.0.2的版本之后就已经不发布spring-framework-3.0.2.RELEASE-dependencies.zip包了。笔者在之前也是网上一顿狂找,浪费了不少的时间。

添加步骤

一、添加由apache提供的用于日志记录的接口,里面定义的都是日志接口规范

(1)在依赖包的目录下打开org.apache.commons/com.springsource.org.apache.commons.logging/1.1.1目录

(2)选择jar包

在这里插入图片描述

二、添加具体实现包

(1)解压目录下org.apache.log4j\com.springsource.org.apache.log4j\1.2.15

(2)选择jar包

在这里插入图片描述

导包完成

至此项目的jar包已经导入完毕,下图是项目中添加包之后的视图

!在这里插入图片描述

创建接口和类

(1)传统的开发方式(面向接口的编程)

在没有Spring之前,传统的开发中通常会伴随着接口与相应的实现类的书写方式出现,这时候的一般开发方式是使用父类接口引用指向子类对象的方法进行(即多态)。如下图所示为传统的开发方式

在这里插入图片描述

传统开发方式存在的不足:

接口和实现类有耦合(联系过紧)

如果接口有多个实现类,在项目改变需求的时候,需要进行改变java代码才可以实现功能的改变。

思考:如果底层的实现切换了,需要修改源代码,能不能在不修改代码的情况下实现对程序的扩展?

好的程序设计满足OCP原则,在尽量不修改程序源代码的基础上对程序进行扩展

工厂模式的出现

工厂模式中,接口和实现类的调用过程中不新建对象,全部交由工厂进行对象的新建与生产。工厂模式如图所示

在这里插入图片描述

存在问题:虽然工厂模式解决了接口和实现类之间的耦合问题。但是,如上图所示,在开发过程中如果底层的实现类发生了改变,那么将需要对工厂类中的代码进行修改。这时候接口和实现类已经没有了耦合关系,但是工厂和接口之间存在了耦合的情况。

程序之间耦合解决方法:工厂模式+反射+配置文件,如图所示。在实现类发生变化的时候只需要修改配置文件即可实现对程序的扩展。(其实这就是Spring IOC的底层实现)

在这里插入图片描述

(2)Spring开发方式

1)在src目录下新建配置文件:applicationContext.xml(xml格式文件,名字可以随便取,该处为默认的配置文件名)

2)引入配置文件约束

在使用spring的配置文件时,新添加一个配置文件就需要添加相应的约束。原因是spring在启动的时候需要验证xml文档,约束的作用就是来验证配置文件的xml文档语法的正确性。

加入方式

目录:spring-framework-5.1.9.RELEASE\docs\spring-framework-reference

打开目录下的core.html文件,通过快捷键撒的方式对文件进行检索The Beans Schema关键词,并复制如下图所示代码到配置文件中去

在这里插入图片描述

3)编写配置文件,并在测试文件中将接口的实现类进行定义,将其交由Spring进行管理,如图所示

在这里插入图片描述

4)创建日志文件

在src的目录下创建名为log4j.propertiesj配置文件,配置log4j输出的类型,记录的位置,日志的编码格式等等。创建完成后,添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###
# error warn info debug trace
log4j.rootLogger= info, stdout

5)编写测试类进行测试

在这里插入图片描述