Spring的创建和使用

Spring的创建和使用

  • Spring的创建
    • 创建Maven项目
    • 引入Spring依赖
    • 添加启动类
  • Spring的使用
    • 存储Bean
      • 创建 Bean
      • 将 Bean 存储至 Spring
    • 获取Bean
      • 获取 Spring
        • 对比ApplicationContext与BeanFactory
      • 从 Spring 中读取 Bean
  • 总结

Spring的创建

创建Maven项目


Spring的创建和使用_第1张图片

Spring的创建和使用_第2张图片

引入Spring依赖


添加如下代码至pom.xml文件中



        
            org.springframework
            spring-context
            5.2.3.RELEASE
        

        
            org.springframework
            spring-beans
            5.2.3.RELEASE
        


Spring的创建和使用_第3张图片

如果Jar包下载失败
可以参考这篇文章

添加启动类


Spring的创建和使用_第4张图片

Spring的使用


Spring 是包含众多工具方法的IOC容器

Spring 作为一个容器. 最基本的功能为

  • 将对象存入到容器
  • 从容器中取出对象

在 Java 中, 可以将对象称为 Bean

存储Bean


存储 Bean 可以分为2个步骤

  • 创建 Bean
  • 将 Bean 存储至 Spring

创建 Bean


public class User {
    public String sayHi() {
        return "hi!";
    }
}

将 Bean 存储至 Spring


存储之前, 需要在 resources 下创建xml文件用于声明Spring(指引 Spring 的后续操作)

Spring的创建和使用_第5张图片

复制如下代码至xml文件中


<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
beans>

Spring的创建和使用_第6张图片

将 Bean 存储至 Spring

Spring的创建和使用_第7张图片

注意

  • id
    • id 是对 Bean 的编号, 此处的 id 不允许重复
    • 通常情况下, 存储 Bean 是为了能够将其获取, 而获取 Bean 依赖其对应的 id(编号)
  • class
    • class 是指 Bean 的类型, 如果 Bean 存储在某一包(Package)下, 需要在前面添加包的包名, 用.分隔
    • 例如 User 存储在 test 包下, 其 class="test.User"
  • 不省略 id 和 class
    • 无论 class 是否相同, 只要 id 不同便不会报错(通过 Id 获取 Bean)
    • 只要 class 相同, 无论 id 是否相同都会报错(通过 类型 获取 Bean)
  • 省略 class 不省略 id 运行时会报错
  • 省略 id 不省略 class
    • 只有一个该类型时运行不会报错(类型不同)
    • 有多个该类型时运行会报错(类型相同)
    • 此处的类型包含包名

对于省略 id 不省略 class 的解释

类型(包名 + 类型)不同, 其运行时不会报错

包名 test1, test2
类型 User


类型(包名 + 类型)相同, 运行时会报错

包名 test
类型 User


获取Bean


获取 Bean 可以分为2个步骤

  • 获取 Spring
  • 从 Spring 中读取 Bean
  • 使用 Bean(非必须)

获取 Spring

  • 通过ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");获取
  • 通过BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));获取

注意

configLocation 需要对应 resources 下的 xml 文件

Spring的创建和使用_第8张图片

Spring的创建和使用_第9张图片

对比ApplicationContext与BeanFactory


相同点

  1. 都可以获取 Spring
  2. 都是 Spring 的顶级接口(包含众多的方法)

ApplicationContext

Spring的创建和使用_第10张图片

BeanFactory

Spring的创建和使用_第11张图片

不同点

  1. 继承关系
    ApplicationContext 属于 BeanFactory 的子类
  2. 功能
    BeanFactory 只有最基础的访问 Bean 的能力
    ApplicationContext 除了拥有 BeanFactory 的功能之外, 还包含更多的功能
    例如国际化支持, 资源访问, 事件传播…
  3. 性能
    ApplicationContext 的加载方式是将 Bean 一次性加载(饿汉模式)
    BeanFactory 的加载方式是当需要某个 Bean 时再去加载所需的 Bean(懒汉模式)

继承关系

Spring的创建和使用_第12张图片

Spring的创建和使用_第13张图片

从 Spring 中读取 Bean

  • 根据 Id 获取 Bean
    User user = (User) context.getBean("user");
    • 需要将获取结果进行强转
    • user(Id)
  • 根据 类型 获取 Bean
    User user = context.getBean(test.User.class);
    • test.user(test 包名 / user 类型)
  • 根据 Id + 类型 获取 Bean
    User user = context.getBean("user", test.User.class);

建议使用 Id + 类型 的方式获取 Bean

对于根据 Id 获取 Bean
当 getBean 的结果为其他引用类型时, (User)其他引用类型 → Error

对于根据 类型 获取 Bean
当 xml 文件中注入多个相同的类型时(不考虑包的情况) → Error

总结


  1. 操作容器之前, 需要先有容器(创建 Spring 项目)
  2. 容器的基本功能 — 存对象(存储 Bean)
    • 创建 Bean
    • 将 Bean 存储至 Spring
  3. 容器的基本功能 — 取对象(获取 Bean)
    • 获取 Spring
    • 从 Spring 中读取 Bean

Spring的创建和使用_第14张图片

你可能感兴趣的:(JavaEE,spring,java)