一、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. Android 创建项目出现No resource found that matches the given name Theme.AppCompat.Light

    关于为何出现No resource found that matches the given name ‘Theme.AppCompat.Light’的原因 这边博客已经写的很清楚了 大家可以参考一下 ...

  2. instanceof php

    instdnceof php5  的一个新成员 功能: 使用这个关键字可以确定一个对象是否是类的实例,是否是累的子类 ,还是实现了某个特定的接口. <?php class A{} class B ...

  3. Python中__new__与__init__介绍

    在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...

  4. Luogu 3899 [湖南集训]谈笑风生

    BZOJ 3653权限题. 这题方法很多,但我会的不多…… 给定了$a$,我们考虑讨论$b$的位置: 1.$b$在$a$到根的链上,那么这样子$a$的子树中的每一个结点(除了$a$之外)都是可以成为$ ...

  5. Entity Framework 6.0 Tutorials(11):Download Sample Project

    Download Sample Project: Download a sample project for Entity Framework 6 Database-First model below ...

  6. Input的size与maxlength属性的区别

    最近做项目用到input的size和maxlength属性,以前只顾用没有用心去看看这2个标签的区别,今天周末baidu了一下,有所理解.特记录于此!   <p>Name: <inp ...

  7. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    原文地址:http://www.cnblogs.com/wuhuacong/p/3317223.html 在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中 ...

  8. 编写高质量代码改善C#程序的157个建议——建议53:必要时应将不再使用的对象引用赋值为null

    建议53:必要时应将不再使用的对象引用赋值为null 在CLR托管的应用程序中,存在一个“根”的概念,类型的静态字段.方法参数.以及局部变量都可以作为“根”的存在(值类型不能作为“根”,只有引用类型的 ...

  9. C#ADO.NET基础一

    简介 使用SQLite进行讲解 1.基础类: SQLiteConnection 连接数据库 SQLiteCommand 执行命令(增,删,改,查),或存储过程 SQLiteDataReader 读取查 ...

  10. SqlServer给一个表增加多个字段语法

    添加字段语法 alter table table_name add column_name +字段类型+ 约束条件 给一个表增加多个字段: use NatureData go alter table ...