Spring1️⃣入门使用、配置

Spring

基于 Spring 5.3.9 学习

image-20210729231340620

Spring 是一个轻量级的控制反转、面向切面编程的容器。

解决企业应用开发的复杂性:使用 JavaBean 代替复杂的 EJB

  • 特点:轻量级、开源、非入侵式

  • 核心:IoC、AOP(之后会详解)

    • IoC:Inversion of Control,控制反转
    • AOP:Aspect Oriented Programming,面向切面编程
  • 优势

    1. 方便解耦,简化开发
    2. AOP 编程
    3. 声明式事务
    4. 方便程序测试
    5. 方便集成框架
    6. 降低 JavaEE 开发难度
    7. 源码学习
    image-20210729234741828

有关起源

  • 2002年,首次推出了 Spring 框架的雏形:interface 21框架
  • 2004年3月24日, Spring 框架以 interface 21 框架为基础重新设计,发布了1.0正式版;
  • Rod Johnson:Spring Framework 创始人,悉尼大学计算机学位和音乐学位,音乐学博士学位。

获得Spring

1、入门

先不管原理是什么,体验一下 Spring 的开发流程。

  1. 导入 Spring 开发所需的项目依赖。
  2. 编写业务类(通常是接口和实现类)。
  3. 配置元数据:创建 Spring 核心配置文件,配置业务类(通常是实现类)。
  4. 通过 Spring API 获得 Bean 实例。

项目依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.9</version>
</dependency>

1.1、案例一

演示:如何获取对象

编写业务类

// 实体类
public class Hello {
    public void say(){
        System.out.println("Hello!!!");
    }
}

配置元数据

  • 核心配置文件:通常命名为 applicationContext.xml

  • 配置业务类:使用 bean 标签,id 为对象名,class 为对象的全限类名

    <?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
    https://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="hello" class="indi.jaywee.Hello"></bean>
    </beans>
    

获取 Bean 实例

  1. 实例化容器:根据配置文件加载元数据,装配 bean 对象

  2. 获取对象:根据 bean 的 ID(可选参数:指定对象 class 类型)。

  3. 使用对象

    @Test
    public void test() {
        // 实例化容器
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
    	// 获取对象
        Hello hello = context.getBean("hello", Hello.class);
    	// 使用对象
        hello.say();
    }
    

1.2、案例二

演示:如何为对象属性赋值

public class HelloSpring {
    private int id;
    private String name;

	// getter、setter、toString() 等方法
}
  1. 配置元数据:bean 标签的子标签——property

    • name:属性名

    • value:基本类型或 String(引用类型使用 ref 属性)

      <bean id="hello1" class="indi.jaywee.HelloSpring">
          <property name="id" value="7"/>
          <property name="name" value="jaywee"/>
      </bean>
      
  2. 测试

    • 实例化容器

    • 获取对象

      @Test
      public void test() {
          // 实例化容器
          ApplicationContext context = new ClassPathXmlApplicationContext("helloBeans.xml");
          // 获取对象
          HelloSpring hello = context.getBean("hello1", HelloSpring.class);
          // 使用对象
          System.out.println(hello);
      }
      

2、Spring 配置

Spring 配置文件,基本上都是围绕 Bean 来展开的。

2.1、bean 标签

将对象注册到 Spring 容器中,由 Spring 管理。

基本属性

  • id:Bean 实例在 Spring 容器中的唯一标识。

  • class:Bean 的全限类名

    <bean id="hello" class="indi.jaywee.Hello">
    </bean>
    

2.1.1、scope 属性

Bean 对象作用域

image-20210731165728337
  • 常见
    • 单例:全局共享同一个 Bean 实例(默认)
    • 原型:每次从容器中获取 Bean 时,得到一个新的对象实例(多例)
  • web 项目(关于以下几个对象作用域的讲解:本文末尾
    • 请求:每个 HttpRequest 对象有一个实例。
    • 会话:每个 Session 对象有一个实例。
    • 应用:每个 ServletContext 对象有一个实例。

不同作用域的 Bean

  • 单例
    • 创建:读取元数据时(Spring 核心文件被加载)
    • 销毁:当应用卸载,容器销毁时。
  • 原型
    • 创建:调用 getBean() 获取对象时。
    • 销毁:对象长时间不用,被 Java 垃圾回收。

2.1.2、name 属性

给 Bean 起一个或多个别名

多个别名之间用【空格/逗号/分号】分割

<bean id="hello" class="indi.jaywee.pojo.HelloSpring" name="hello3 hello4,hello5;hello6">
    <property name="id" value="7"/>
    <property name="name" value="jaywee"/>
</bean>

2.1.3、生命周期相关属性

关于 Bean 生命周期,之后会讲解

  • init-method:初始化方法名称
  • destory-method:销毁方法名称

2.2、alias 标签

相当于 bean 标签的 name 属性

  • name:起别名的 Bean。

  • alias:别名。

    <bean id="hello" class="indi.jaywee.pojo.HelloSpring">
        <property name="id" value="7"/>
        <property name="name" value="jaywee"/>
    </bean>
    
    <alias name="hello" alias="hello1"/>
    <!-- 为别名起别名,相当于多个别名 -->
    <alias name="hello1" alias="hello2"/>
    

2.3、import

实际开发中,Spring 配置很多,需要分模块开发编写配置文件

通过 import 标签,合并配置文件

<!-- resource指定文件名 -->
<import resource="application-xxx.xml"/>
<import resource="application-yyy.xml"/> 
<import resource="application-zzz.xml"/>  

实例化容器时,只需传入总核心配置文件

// 实例化容器
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
posted @ 2021-07-29 23:48  Jaywee  阅读(168)  评论(0编辑  收藏  举报

👇