一、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结构图

 

【核心容器(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框架

  举个例子:

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

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

  

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

  

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

  总结:

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

  IOC方式:对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制 (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了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/

  下载后解压的目录结构:

  

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

   核心容器(Core Container)中的四个jar包(spring-core、spring-beans、spring-context、spring-expression)是我们使用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

  

  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 容器。

   

  从上图中我们可以几乎看到, 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

Spring学习笔记(一)—— Spring介绍及入门案例的更多相关文章

  1. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  2. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  3. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  4. Spring学习笔记(3)——快速入门

    项目目录如下: Say.java为主函数通过ApplicationContext创建对象,利用方法ClassPathXmlApplicationContext访问配置文件Applicationcont ...

  5. spring学习笔记一:spring介绍

    jar包下载地址:http://repo.spring.io/release/org/springframework/spring/ spring特点: 1.非侵入性 spring框架的API不会在业 ...

  6. [Spring学习笔记 5 ] Spring AOP 详解1

    知识点回顾:一.IOC容器---DI依赖注入:setter注入(属性注入)/构造子注入/字段注入(注解 )/接口注入 out Spring IOC容器的使用: A.完全使用XML文件来配置容器所要管理 ...

  7. 1.2(Spring学习笔记)Spring中的Bean

    一.<Bean>的属性及子元素 在1.1中我们对<Bean>有了初步的认识,了解了一些基本用法. 现在我们进一步理解<Bean>属性及子元素. 我们先来看下< ...

  8. Spring学习笔记之Spring概述

    概述   Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...

  9. Spring学习笔记之五----Spring MVC

    Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...

  10. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

随机推荐

  1. resin3.X那些事之resin.conf

    [经验总结]resin那些事之resin.conf ----by johnson 话说与resin打交道很久了,却从未系统了解过.resin一听火了,说:你老兄当真与我打交道很久了?工具.流程如此发达 ...

  2. hadoop 2.7.3 (hadoop2.x)使用ant制作eclipse插件hadoop-eclipse-plugin-2.7.3.jar

    为了做mapreduce开发,要使用eclipse,并且需要对应的Hadoop插件hadoop-eclipse-plugin-2.7.3.jar,首先说明一下,在hadoop1.x之前官方hadoop ...

  3. 11-内涵段子-爬虫(python+正则)

    爬取内涵段子,使用正则进行简单处理: #_*_ coding: utf-8 _*_ ''' Created on 2018年7月14日 @author: sss function:爬去内涵段子(静态网 ...

  4. Docker ubuntu镜像更换apt-get源

    在Dockerfile中添加 RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN ap ...

  5. 数组 array 矩阵 list 数据框 dataframe

    转自 :  http://blog.csdn.net/u011253874/article/details/43115447 <span style="font-size:14px;& ...

  6. Luogu 4473 [国家集训队]飞飞侠

    BZOJ 2143 新技能:并查集优化最短路. 暴力最短路是$O(n^4)$的,然后拿个线段树优化一下连边就$O($能过$)$了. 但是这样都太慢了. 我们考虑一个点如果之前被更新过了,那么之后就不会 ...

  7. Part10-C语言环境初始化-Bss段初始化lesson2

    1.BSS段的作用 初始化的全局变量存放在数据段: 局部变量存放在栈中: malloc的存放在堆: 未初始化的全局变量存放在BSS段: 找到bss段的起始与结束地址,往里面添加0,便初始化好了. 打开 ...

  8. sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法

    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法: 需要下载Emmet插件,按网上写的步骤按ctrl+shift+P打开命令面板,输入install,鼠标点击 ...

  9. Action Results in MVC

  10. HttpAnalyzerStdV7安装教程

    相关链接:HttpAnalyzerStdV7使用教程 安装步骤:   1.解压压缩包   2.双击运行安装文件   3.根据向导提示点击Next   4.选择接受协议,点击Next   5.修改安装路 ...