• Spring的创建和使用


    目录

    1.创建 Spring 项目

    1.1 创建 Maven 项目

    1.2 添加 Spring 框架

    1.3 添加启动类

    2.将 Bean 对象存储到 Spring(IoC容器)

    2.1 创建一个 Bean 对象

    2.2 将 Bean 存储到 Spring 中

    3.获取并使用 Bean 对象

    3.1 得到 spring 上下文对象

    3.2 获取 Bean 对象

    3.3 使用 Bean(非必须)


    在 java 中对象也叫 Bean所以后面再遇到对象就以 Bean 著称

    1.创建 Spring 项目

    创建一个Spring 项目,总共分三步:

    1️⃣创建一个普通 Maven 项目

    2️⃣添加 Spring 框架支持(spring-context、spring-beans)

    3️⃣添加启动类

    1.1 创建 Maven 项目

    1.2 添加 Spring 框架

    pom.xml 中添加 Spring 框架的支持,xml 配置如下:

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.springframeworkgroupId>
    4. <artifactId>spring-beansartifactId>
    5. <version>5.2.3.RELEASEversion>
    6. dependency>
    7. <dependency>
    8. <groupId>org.springframeworkgroupId>
    9. <artifactId>spring-contextartifactId>
    10. <version>5.2.3.RELEASEversion>
    11. dependency>
    12. dependencies>
    • spring-context:spring 上下文
    • spring-beans:管理对象的模块

    1.3 添加启动类

    在 java 文件夹下边创建一个启动类,包含 main 方法:

    1. public class App {
    2. public static void main(String[] args) {
    3. }
    4. }

    2.将 Bean 对象存储到 Spring(IoC容器)

    存储 Bean 分为两步:

    1️⃣存储 Bean 之前,我们需要先有 Bean 才行,因此需要先创建 Bean

    2️⃣将创建的 Bean 注册到  Spring 容器中

    2.1 创建一个 Bean 对象

    在 Java 文件夹中创建一个普通对象:

    1. //创建一个bean对象
    2. public class UserService {
    3. public void sayHi() {
    4. System.out.println("Hi, UserService");
    5. }
    6. }

    2.2 将 Bean 存储到 Spring 中

    在创建好的项目中添加 Spring 配置文件 spring-config.xml,将此文件放到 resources(放置配置文件和静态数据) 的根目录下。

    spring-config.xml

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xmlns:content="http://www.springframework.org/schema/context"
    5. 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">
    6. beans>

    spring-config.xml 中声明将什么对象存储到 spring 当中:将 UserService 对象注册到 Spring 中,具体操作是在 中添加配置:

    1. <beans>
    2. <bean id = "user" class = "com.bit.demo.UserService">bean>
    3. beans>

    只是一个声明,并没有真正的将这个对象放在容器中;在调用相关方法的时候才会去存储

    3.获取并使用 Bean 对象

    获取并使用 Bean 对象,分为三步:

    1️⃣得到 Spring 上下文对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下文

    2️⃣通过Spring 上下文,获取一个指定的 Bean 对象

    3️⃣使用 Bean 对象

    3.1 得到 spring 上下文对象

    1️⃣Spring 上下⽂对象可使用 ApplicationContext:

    ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

    2️⃣使用BeanFactory

    BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

    这里的重点是一道经典面试题:ApplicationContext VS BeanFactory

    • 相同点:都是容器管理对象,都可以获取 Bean 对象
    • 不同点:
    1. ApplicationContext 属于 BeanFactory 的子类,ApplicationContext 拥有更多的功能(对国际化支持、资源访问支持、以及事件传播等方面的支持。)
    2. 加载 Bean 机制不同:BeanFactory 懒加载,按需加载(使用一个 Bean 加载一个 Bean),ApplicationContext 一次性加载所有 Bean 对象

    解释加载 Bean 机制不同:

    创建两个普通类Student、UserService:

    1. public class Student {
    2. public Student() {
    3. System.out.println("Student init");
    4. }
    5. }
    1. public class UserService {
    2. public UserService() {
    3. System.out.println("UserService init");
    4. }
    5. }

    Spring 配置文件 spring-config.xml:

    1. <bean id = "user" class = "com.bit.demo.UserService">
    2. <bean id = "stu" class = "com.bit.demo.Student">

    在 java 文件夹下边创建两个启动类App、App2:

    • App 中使用 ApplicationContext 获取上下文对象
    1. public class App {
    2. public static void main(String[] args) {
    3. //1.先得到 spring 上下文对象
    4. ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
    5. }
    6. }
    • APP2 中使用 BeanFactory 获取上下文对象
    1. public class App2 {
    2. public static void main(String[] args) {
    3. //1.得到 spring 上下文对象
    4. BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
    5. //2.获取 bean
    6. UserService userService = (UserService)context.getBean("user");
    7. }
    8. }

    3.2 获取 Bean 对象

    1. //2.得到 Bean [依赖查找 -》 IoC的一种实现]
    2. UserService userService = (UserService) context.getBean("user");

    getBean 更多用法:

    1️⃣根据名称获取 Bean 对象(强转)

    UserService userService = (UserService) context.getBean("user");

    2️⃣ 根据类型获取 Bean 对象

    UserService userService = context.getBean(UserService.class);

    可能会出问题:当同一个类型注入到 Spring 多个的情况下,那么使用类型获取 Bean 就会报错

    3️⃣根据名称+类型来获取(解决上面同一个类型注入到 Spring 多个的情况下)

    UserService userService = context.getBean("user", UserService.class);

    3.3 使用 Bean(非必须)

    userService.sayHi();

  • 相关阅读:
    五笔字根表
    MFC入门问题(L)
    黑马程序员C++类和对象【6】—— 继承(一文万字带你搞懂C++继承 —— 你还不知道怎么学C++继承吗?不知道虚继承底层原理吗?)
    Kafka 之 KRaft —— 配置、存储工具、部署注意事项、缺失的特性
    在macOS 上执行sed命令报错问题
    JVM_逃逸分析
    阿里云无影电脑:免费体验无影云电脑3个月
    资金核对平台的发展历程
    C# 图解教程 第5版 —— 第11章 结构
    批量上传文件,以input上传文件,后端以List<MultipartFile>类型接收
  • 原文地址:https://blog.csdn.net/m0_72161237/article/details/133698039