SpringFramework-入门案例

入门案例

一个简单的spring工程

概要:使用xml配置方式创建一个对象,并执行其方法

  1. 创建一个maven工程,指定jdk,spring版本
  2. 在pom.xml文件中导入spring-context和junit依赖
  3. 创建一个类路径为com.atli.pojo的User类,并编写hello方法
  4. 使用<bean>标签将user类注册到ioc容器中
  5. 在test中创建一个测试类并编写测试方法
    1. 使用@Test注解标识测试方法
    2. 通过ClassPathXmlApplicationContext实现类创建Spring Ioc容器对象
    3. 通过容器的getBean方法获取user对象
    4. 调用user对象的hello方法

实例

spring工程配置文件

<!-- pom.xml配置文件 -->

<dependencies>
  <!-- spring context依赖-->
  <!-- 当引入Spring Context依赖之后,表示将Spring的基础依赖都引入了-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.0.2</version>
  </dependency>
    <!--junit相关依赖  -->
    <!-- 可以使用@Test注解进行测试 -->
  <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.6.3</version>
  </dependency>

</dependencies>

IoC容器配置文件

<!-- bean.xml配置文件 -->
<bean id="user" class="com.atli.spring6.User"></bean>

User类

package com.atli.pojo;

public class User {
    public void hello(){
        System.out.println("Hello");
    }
}

测试类

public class UserTest {
    @Test
    public void test(){
        //加载spring配置文件,对象创建
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        //获取创建的对象
        User user = (User) context.getBean("user");
        //使用对象调用方法
        user.add();
    }
}

流程分析

  1. Spring在启动时通过ApplicationContext接口的实现类(比如ClassPathXmlApplicationContext)来加载配置类或者配置文件
  2. 当文件加载完成后,Spring利用BeanDefinitionReader接口的实现类(如XmlBeanDefinitionReader)对配置文件进行解析操作,将Bean的定义信息解析成BeanDefinition对象。
  3. 这些BeanDefinition对象会被注册到DefaultListableBeanFactory内部的beanDefinitionMap中
  4. 当Spring容器根据解析到的BeanDefinition信息,利用BeanFactory接口及其实现类(如DefaultListableBeanFactory)来实例化Bean对象
  5. 当Bean对象实例化完成后,Spring会使用AutowiredAnnotationBeanPostProcessor等后置处理器来将Bean所需的依赖注入到Bean中,确保Bean直接按的关系正确建立
  6. 在Bean实例化完成后,Spring容器会调用@Bean注解的initMethod属性或者是XML配置中指定的init-method来对bean进行初始化(在初始化前后也可以自定义后置处理器逻辑,需要重写BeanPostProcessor中的postProcessBeforeInitialization和postProcessAfterInitialization方法,这些后置处理器会对容器中所有的bean生效,后置处理器也要通过bean标签放入容器中)
  7. 当需要使用对应bean时,通过getBean方法来获取相应的实例(在懒加载或者是多例模式下,以上对于bean的实例化和初始化动作会在调用getBean方法时才进行)

所提到的类和接口

  • application.xml
    • 其中配置了要放入ioc容器的bean信息
  • ApplicationContext接口
    • 它是BeanFactory的子接口,提供了更多的功能
    • 负责管理Spring应用中的所有bean
  • BeanFactory接口
    • 是SpringIoC容器标准化的超接口,它提供了一种高级配置机制,能够管理任何类型的对象
  • BeanDefinitionReader接口
    • 用于读取和解析Bean定义的信息,然后将这些信息转换为Spring的内部数据结构BeanDefinition
  • XmlBeanDefinitionReader类
    • 用于读取XML配置文件中Bean定义
  • AnnotationBeanDefinitionReader
    • 用于扫描注解来注册Bean定义
  • BeanDefinition对象
    • 其中包含了该Bean的元数据信息,比如类名、作用域、依赖关系等。
  • DefaultListableBeanFactory
    • 是 BeanFactory 接口的一个默认实现
    • 负责管理 Bean 的定义、创建、配置和生命周期
  • beanDefinitionMap
    • 充当一个注册表的角色,用于存储和管理所有Bean的元数据信息
    • 这个Map的键通常是Bean的名称(id或者name),值是对应的BeanDefinition对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值