Spring学习笔记(一)—— Spring介绍及入门案例

时间:2021-05-23 10:31:04

一、Spring概述

1.1 Spring是什么

  Spring是一个开源框架,是于2003年兴起的一个轻量级的Java开发框架, 由Rod Johnson 在其著作Expert one on one J2EE design and development中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式)轻量级开源框架。

目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用

  它是一个容器框架,用来装javabean(java对象),中间层框架(万能胶)可以起一个连接作用,比如说把Struts和hibernate粘合在一起运用。

1.2 为什么要学习Spring

  • 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象的创建和依赖关系交给Spring来管理,避免硬编码所造成的过度程序耦合。

  • AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程

  • 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序

  • 方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、Mybatis、Quartz等)的直接支持

  • 降低JavaEE API的使用难度:Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

1.3 Spring的体系结构

  下面是官网给出的Spring4结构图

 Spring学习笔记(一)—— Spring介绍及入门案例

【核心容器(Core Container)】

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

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

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

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

【数据访问/集成部分(data access)】

  1. spring-jdbc:jdbc的支持

  2. spring-orm:对象关系映射,集成orm框架

  3. spring-oxm:对象xml映射

  4. spring-jms:java消息服务

  5. spring-tx:事务控制

【web】

  1. spring-websocket:websocket protocol是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,spring支持websocket通信。

  2. spring-web:基础web功能,如文件上传

  3. spring-webmvc-portlet:提供了在portlet环境下的mvc实现

  4. spring-webmvc:mvc实现

【AOP】

  1. spring-aop:面向切面编程

  2. spring-aspects:集成AspectJ

  3. spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器

【test】

  1. spring-test:spring测试,提供junit与mock测试功能

1.4 Spring IoC 和 DI 简介

【IoC:Inverse of Control】——控制反转

  • 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
  • 正控:若要使用某个对象,需要自己去负责对象的创建
  • 反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架

  举个例子:

  控制反转显然是一个抽象的概念,我们举一个鲜明的例子来说明。

  在现实生活中,人们要用到一样东西的时候,第一反应就是去找到这件东西,比如想喝新鲜橙汁,在没有饮品店的日子里,最直观的做法就是:买果汁机、买橙子,然后准备开水。值得注意的是:这些都是你自己“主动”创造的过程,也就是说一杯橙汁需要你自己创造。

  Spring学习笔记(一)—— Spring介绍及入门案例

  然而到了今时今日,由于饮品店的盛行,当我们想喝橙汁时,第一想法就转换成了找到饮品店的联系方式,通过电话等渠道描述你的需要、地址、联系方式等,下订单等待,过一会儿就会有人送来橙汁了。

  Spring学习笔记(一)—— Spring介绍及入门案例

  请注意你并没有“主动”去创造橙汁,橙汁是由饮品店创造的,而不是你,然而也完全达到了你的要求,甚至比你创造的要好上那么一些。

Spring学习笔记(一)—— Spring介绍及入门案例

  总结:

  传统的方式:通过new 关键字主动创建一个对象

  IOC方式:对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。
  Spring学习笔记(一)—— Spring介绍及入门案例

【DI:Dependency Injection】——依赖注入

  • 指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设置给该对象  。
  • 实现IOC需要DI做支持
  • 注入的方式:
    • set方法注入
    • 构造方法注入
    • 字段注入
  • 注入类型:
    • 值类型注入(8大基本数据类型)
    • 引用类型注入(将依赖对象注入)    

二、入门案例

2.1 下载Spring的开发包

  官网:http://spring.io/

  下载地址:https://repo.spring.io/libs-release-local/org/springframework/spring/

  下载后解压的目录结构:

  Spring学习笔记(一)—— Spring介绍及入门案例

2.2 创建web工程,引入Spring的开发包

   核心容器(Core Container)中的四个jar包(spring-core、spring-beans、spring-context、spring-expression)是我们使用spring要导入的最最基础的包。

  Spring学习笔记(一)—— Spring介绍及入门案例

  另外还需要一个日志包:Spring学习笔记(一)—— Spring介绍及入门案例

2.3 创建一个对象

public class User {
private String name;
private Integer age;
get/set...
}

2.4 创建配置文件

  • 配置文件可放在任意位置,建议放在src下
  • 配置文件的文件名任意,建议为applicationContext.xml

【导入约束】

  详细步骤见:spring配置文件中导入约束的详细步骤

【将对象注册到容器中】

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<!-- 将User对象交给Spring容器管理 -->
<!-- Bean元素:使用该元素描述需要spring容器管理的对象
class属性:被管理对象的完整类名
name属性:给被管理的对象起个名字,获得该对象时根据该名称获得对象,可以重复,可以使用特殊字符
id属性:与name属性一模一样,名称不可重复,不能使用特殊字符
-->
<bean name="user" class="cn.itcast.domain.User"></bean>
</beans>

2.5 编写测试代码

  @Test
public void fun1() throws Exception {
// 1.创建容器对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2.向容器"要"user对象
User user = (User) applicationContext.getBean("user");
// 3.打印user对象
System.out.println(user);
}

三、Spring中的容器

3.1 ApplicationContext

  Spring学习笔记(一)—— Spring介绍及入门案例

  ApplicationContext接口有两个实现类:

  • ClassPathXmlApplicationContext:从类路径下加载配置文件:
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  • FileSystemXmlApplicationContext:从硬盘绝对路径下加载配置文件
    ApplicationContext ac = new FileSystemXmlApplicationContext("c:/applicationContext.xml");

  ApplicationContext容器的特点:每次容器启动时就会创建容器中配置的所有对象

3.2 BeanFactory

  ApplicationContext 是 BeanFactory 的子接口之一,换句话说:BeanFactory 是 Spring IoC 容器所定义的最底层接口,而 ApplicationContext 是其*接口之一,并对 BeanFactory 功能做了许多的扩展,所以在绝大部分的工作场景下,都会使用 ApplicationContext 作为 Spring IoC 容器。

   Spring学习笔记(一)—— Spring介绍及入门案例

  从上图中我们可以几乎看到, BeanFactory 位于设计的最底层,它提供了 Spring IoC 最底层的设计。

  BeanFactory接口实现类的容器.特点是每次在获得对象时才会创建对象

【BeanFactory 和 ApplicationContext 的区别】

  • BeanFactory:是Spring中最底层的接口,只提供了最简单的IoC功能,负责配置,创建和管理bean。另外,BeanFactory是在getBean的时候才会生成类的实例。
  • ApplicationContext:继承了 BeanFactory,拥有了基本的 IoC 功能;ApplicationContext在加载applicationContext.xml(容器启动)时候就会创建类的实例。

   在应用中,一般不使用 BeanFactory,而推荐使用ApplicationContext(应用上下文)

 
 
参考资料:https://www.cnblogs.com/wmyskxz/p/8820371.html