通过springboot框架创建对象(一)

简介: 在Spring Boot中,对象创建依赖于Spring框架的核心特性——控制反转(IoC)和依赖注入(DI)。IoC将对象的创建和管理交由Spring应用上下文负责,开发者只需定义依赖关系。DI通过构造函数、setter方法或字段注入实现依赖对象的传递。Spring Boot的自动配置机制基于类路径和配置文件,自动为应用程序配置Spring容器,简化开发过程。Bean的生命周期包括定义扫描、实例化、依赖注入、初始化和销毁回调,均由Spring容器管理。这些特性提高了开发效率并简化了代码维护。

在 Spring Boot 框架中创建对象主要依赖于 Spring 框架的核心特性 —— 控制反转(Inversion of Control,IoC)和依赖注入(Dependency Injection,DI),下面详细介绍其原理。

  1. 控制反转(IoC)原理
    控制反转是一种设计原则,它将对象的创建和管理控制权从代码内部转移到外部容器。在 Spring Boot 中,这个外部容器就是 Spring 的应用上下文(ApplicationContext)。
    原理阐述
    传统的编程方式中,对象的创建和依赖关系的管理由开发者在代码中手动完成。而在 IoC 模式下,对象的创建、初始化、销毁等生命周期管理都由 Spring 容器负责。开发者只需要定义对象和它们之间的依赖关系,Spring 容器会根据这些定义来创建和组装对象。
    示例理解
    假设我们有一个 UserService 类,它依赖于 UserRepository 类。
    代码如下:

    public class UserService {
     private UserRepository userRepository;
    
     public UserService() {
         this.userRepository = new UserRepository();
     }
    }
    

    l
    在 loC 模式下,我们将对象的创建交给 Spring 容器:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}
  1. 依赖注入(DI)原理
    依赖注入是实现控制反转的一种具体方式,它通过构造函数、setter 方法或字段注入等方式将依赖对象提供给需要的对象。
    原理阐述
    Spring 容器在创建对象时,会分析对象的依赖关系,并将这些依赖对象注入到目标对象中。注入的过程在对象创建后立即进行,确保对象在使用时其依赖已经准备好。
    注入方式及原理
    构造函数注入
    构造函数注入是指通过构造函数将依赖对象传递给目标对象。Spring 容器在创建对象时,会自动查找合适的构造函数,并将依赖对象作为参数传递进去。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

Setter 方法注入
Setter 方法注入是指通过 setter 方法将依赖对象设置到目标对象中。Spring 容器在创建对象后,会调用相应的 setter 方法进行注入。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}

3 . Spring Boot 自动配置原理
Spring Boot 的自动配置是其一大特色,它基于类路径下的依赖和配置文件,自动为应用程序配置 Spring 容器。
原理阐述
Spring Boot 的自动配置机制通过 @EnableAutoConfiguration 注解触发。该注解会导入 AutoConfigurationImportSelector 类,该类会从 META-INF/spring.factories 文件中读取所有的自动配置类。然后,Spring Boot 会根据类路径下的依赖和配置文件中的属性,判断哪些自动配置类应该生效,并将相应的 Bean 定义注册到 Spring 容器中。
示例理解
当我们在项目中引入 Spring Data JPA 的依赖时,Spring Boot 会自动配置数据源、JPA 实体管理器等相关的 Bean。这是因为 Spring Boot 的自动配置类会检查类路径下是否存在 Spring Data JPA 的相关类,如果存在,则会自动配置相应的 Bean。
4 . Bean 的创建和生命周期管理
Spring 容器在启动时,会根据 Bean 的定义(通过注解或 XML 配置)创建 Bean 实例,并管理它们的生命周期。
原理阐述
Bean 定义扫描:Spring Boot 会自动扫描带有特定注解(如 @Component、@Service、@Repository 等)的类,并将它们注册为 Bean 定义。
Bean 实例化:根据 Bean 定义,Spring 容器会使用反射机制创建 Bean 实例。对于单例 Bean,容器只会创建一个实例;对于原型 Bean,每次请求时都会创建一个新的实例。
依赖注入:在 Bean 实例化后,Spring 容器会根据依赖关系进行注入,确保 Bean 的依赖对象已经准备好。
初始化回调:如果 Bean 实现了 InitializingBean 接口或使用了 @PostConstruct 注解,Spring 容器会在 Bean 实例化和依赖注入完成后调用相应的初始化方法。
销毁回调:如果 Bean 实现了 DisposableBean 接口或使用了 @PreDestroy 注解,Spring 容器会在销毁 Bean 之前调用相应的销毁方法。
综上所述,Spring Boot 框架通过控制反转和依赖注入的原理,将对象的创建和管理交给 Spring 容器,同时利用自动配置机制简化了开发过程,提高了开发效率。

相关文章
|
3月前
|
XML 安全 Java
|
1月前
|
前端开发 Java 数据库连接
Spring框架初识
Spring 是一个分层的轻量级开源框架,核心功能包括控制反转(IOC)和面向切面编程(AOP)。主要模块有核心容器、Spring 上下文、AOP、DAO、ORM、Web 模块和 MVC 框架。它通过 IOC 将配置与代码分离,简化开发;AOP 提供了声明性事务管理等增强功能。
87 21
Spring框架初识
|
12天前
|
前端开发 Java 数据库连接
Spring MVC 扩展和SSM框架整合
通过以上步骤,我们可以将Spring MVC扩展并整合到SSM框架中。这个过程包括配置Spring MVC和Spring的核心配置文件,创建控制器、服务层和MyBatis的Mapper接口及映射文件。在实际开发中,可以根据具体业务需求进行进一步的扩展和优化,以构建更加灵活和高效的企业级应用程序。
24 5
|
4月前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
190 0
|
25天前
|
存储 人工智能 开发框架
Spring AI Alibaba 应用框架挑战赛圆满落幕,恭喜获奖选手
第二届开放原子大赛 Spring AI Alibaba 应用框架挑战赛决赛于 2 月 23 日在北京圆满落幕。
|
2月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
148 29
|
17天前
|
存储 监控 数据可视化
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
|
2月前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
|
3月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
4月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
263 53