美文网首页Java
Spring 学习笔记【1】第一个Spring程序与IoC思想

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

作者: 十万嬉皮_c728 | 来源:发表于2022-06-04 15:02 被阅读0次

    一、Spring相关概念

    1️⃣Spring发展史

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

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

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

    image.png

    2️⃣Spring大家族

    Spring 官网

    2.1狭义的Spring

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

    • Spring框架体系结构图
    image.png

    2.2广义的Spring

    广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。如:Spring FrameworkSpringBootSpringCloud

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

    3️⃣Spring核心思想

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

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

    4️⃣Spring 优点

    1. 方便解耦,简化开发
      • 对象的创建和依赖关系的维护交给 Spring 工厂管理
    2. 方便集成各种优秀技术
      • 表现层(web):Spring MVC、Struts2 等框架的整合
      • 业务逻辑层(service):提供管理事务和记录日志的功能
      • 持久层(dao):MyBatis、Hibernate 和 JdbcTemplate 等技术的整合
    3. 支持面向切面(AOP)编程
      • 实现权限拦截和运行监控等功能
    4. 其他功能
      • 声明式事务:通过配置就可以完成对事务的管理
      • 程序测试:Spring 支持 JUnit单元测试

    二、第一个Spring程序

    1️⃣创建Maven项目

    image.png

    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,当然你叫别的名字也可以。
    image.png
    • 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() 方法。

    运行结果

    image.png

    三、IoC控制反转

    1️⃣IoC思想简介

    • 控制反转(IoC,Inversion of Control),是一种设计思想。
    • 传统方式上,对象的创建是由由程序代码直接操控的;而IoC思想提倡将对象调用权交给容器,通过容器来实现对象的装配和管理。
    image.png

    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 容器,分别是 BeanFactoryApplicationContext

    • BeanFactory类中按Ctrl+H可查看层次结构
    image.png

    BeanFactory

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

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

    ApplicationContext

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

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

    • ApplicationContext 接口有两个常用的实现类,如下表👇
    实现类 描述
    ClassPathXmlApplicationContext(String configLocation) 加载类路径 ClassPath 下指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作
    FileSystemXmlApplicationContext(String configLocation) 加载指定的文件系统路径中指定的 XML 配置文件,并完成 ApplicationContext 的实例化工作

    作者:倔强的牛角
    原文链接:https://juejin.cn/post/7101674091748261924

    相关文章

      网友评论

        本文标题:Spring 学习笔记【1】第一个Spring程序与IoC思想

        本文链接:https://www.haomeiwen.com/subject/lfgkmrtx.html