【Spring 学习笔记】第一个 Spring 程序与 IoC 思想

一、Spring 相关概念

1、Spring 发展史

Spring是 Java EE 编程领域的一款轻量级的开源框架,由 Spring 之父 Rod Johnson 于 2002 年提出并创立,它的目标就是要替换以 EJB 为核心的开发方式(EJB 的诟病:使用复杂、代码臃肿、代码侵入性强、开发周期长、移植难度大等),简化开发。所以 Spring 的出现又被喻为 程序员的春天 ,哈哈:grin:

  • 光看发型就知道是大佬了,大佬不仅获得过计算机学位,同时还获得了音乐学的博士学位

之后 Spring 不断发展,2004 年,Spring 1.0 版本正式发布。2017 年,Spring 步入到了第 5 个大版本,也就是我们常说的 Spring 5 ,本教程就是基于 Spring 5.2.10.RELEASE 讲解。

2、Spring 大家族

Spring 官网

2.1 狭义的 Spring

狭义上的 Spring 通常指 Spring Framework ,即 Spring 框架 ,本教程主要讲解的就是 Spring 5.0框架

  • Spring 框架体系结构图

2.2 广义的 Spring

广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈 。如: Spring Framework 、 SpringBoot 和 SpringCloud

  • 经过十多年的发展,Spring 已经不再是一个单纯的应用框架,已经形成了一种开发的 生态圈 ,Spring 有若干个项目可以使用

3、Spring 核心思想

Spring 核心是 控制反转 ( IoC )和 面向切面编程 ( AOP )

IoC 和 AOP 也是本系列教程主要讲解的内容

4、Spring 优点

  1. 方便解耦,简化开发

  2. 对象的创建和依赖关系的维护交给 Spring 工厂 管理

  3. 方便集成各种优秀技术

  4. 表现层(web):Spring MVC、Struts2 等框架的整合

  5. 业务逻辑层(service):提供管理事务和记录日志的功能

  6. 持久层(dao):MyBatis、Hibernate 和 JdbcTemplate 等技术的整合

  7. 支持面向切面(AOP)编程

  8. 实现权限拦截和运行监控等功能

  9. 其他功能

  10. 声明式事务:通过配置就可以完成对事务的管理

  11. 程序测试:Spring 支持 JUnit 单元测试

二、第一个 Spring 程序

1、创建 Maven 项目

2、添加 Spring 的依赖 jar 包

  • 在 pom.xml 文件中导入 spring 5.2.10 的坐标

<dependencies>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>5.2.10.RELEASE</version>    </dependency></dependencies>

复制代码

3、创建 Java 类

  • HelloSpring.java 类代码如下

public class HelloSpring {    private String message;    public void setMessage(String message) {        this.message = message;    }    public void getMessage() {        System.out.println("message : " + message);    }}

复制代码

4、创建 spring 配置文件

  • 在 resources 下添加 spring 配置文件 applicationContext.xml ,当然你叫别的名字也可以。

  • applicationContext.xml 用于给不同的 Bean 分配唯一的 ID,并给相应的 Bean 属性赋值。例如,在以下代码中,我们可以在不影响其它类的情况下,给 message 变量赋值。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <!--        bean标签表示配置bean      id属性表示给bean分配唯一id      class属性表示给bean定义类型  -->    <bean id="helloSpring" class="com.bighorn.HelloSpring">        <property name="message" value="Hello Spring!"/>    </bean></beans>

复制代码

5、编写主方法

  • App.java 类代码如下

public class App {    public static void main(String[] args) {        //获取IoC容器        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        //从容器中获取对象        HelloSpring helloSpring = context.getBean("helloSpring", HelloSpring.class);        helloSpring.getMessage();    }}

复制代码

  • ClassPathXmlApplicationContext 类用于加载 Spring 配置文件、创建和初始化所有对象(Bean)。

  • ApplicationContext 类的 getBean() 方法用来获取 Bean,该方法返回值类型为 Object,通过强制类型转换为 HelloSpring 的实例对象,调用其中的 getMessage() 方法。

运行结果

三、IoC 控制反转

1、IoC 思想简介

  • 控制反转(IoC, Inversion of Control ),是一种设计思想。

  • 传统方式上,对象的创建是由由程序代码直接操控的;而 IoC 思想提倡 将对象调用权交给容器 ,通过容器来实现对象的装配和管理。

2、Spring 和 IoC 的关系

  • Spring 技术对 IoC 思想进行了实现,Spring 提供了一个容器,称为 IoC 容器

  • IoC 容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在 IoC 容器中统称为 Spring Bean

  • Spring IoC 容器使用了 反射 机制创建对象

3、DI 依赖注入

  • 依赖注入(DI, Dependency Injection ),是 IoC 的技术实现,也有人说是 IoC 的另一种称呼。

  • 依赖关系:面向对象编程中,对象之间通常存在一种依赖关系,即对象的一个属性是另外一个类的对象。如 service 层的对象需要依赖 dao 层的对象。

  • Spring IoC 容器在对象创建过程中, 会自动根据依赖关系,将它依赖的对象注入到当前对象中,这就是所谓的“依赖注入”。

  • 依赖注入本质上是 Spring Bean 属性注入 的一种,只不过这个属性是一个对象属性而已。

4、IoC 容器的两种类型

Spring 框架为我们提供了两种不同类型 IoC 容器,分别是 BeanFactory 和 ApplicationContext 。

  • 在 BeanFactory 类 中按 Ctrl+H 可查看层次结构

BeanFactory

BeanFactory 是所有容器的根接口,也是 Spring 提供的最简单的 IoC 容器,它提供了配置框架和基本方法

注意:BeanFactory 默认采用懒加载( lazy-load )机制

ApplicationContext

ApplicationContext 是 BeanFactory 接口的子接口,是对 BeanFactory 的扩展。

ApplicationContext 添加了更多的企业特定的功能,所以通常用它代替 BeanFactory

  • ApplicationContext 接口有两个常用的实现类,如下表:point_down:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值