Spring (5)Spring Bean

在Spring框架中,Spring Bean 是构成应用程序骨架的基本元素,是由Spring IoC容器实例化、配置和管理的对象。Spring Bean是Spring框架管理的任何一个对象,这些对象的创建、生命周期、以及其他特性都由Spring容器负责。

Bean的定义与作用域

Bean定义包含了类的元数据,包括类名、作用域、生命周期回调等,这些信息可以通过XML、注解或Java配置方式提供给Spring容器。

Spring支持多种Bean作用域,包括:

  • Singleton:默认作用域,每个Spring IoC容器中只有一个Bean实例。
  • Prototype:每次请求都会创建一个新的Bean实例。
  • Request:每次HTTP请求都会创建一个新的Bean,仅适用于Web应用。
  • Session:在一个HTTP Session中,每个Session都会创建一个Bean实例,仅适用于Web应用。
  • GlobalSession:全局Session作用域,仅适用于Portlet应用。

Bean的生命周期

Bean的生命周期包括Bean定义的注册、Bean的初始化、Bean的使用以及Bean的销毁。

  1. 注册Bean定义:首先,Spring容器从配置源(XML、注解或Java配置)读取Bean定义并注册。
  2. 实例化Bean:根据Bean定义,Spring容器通过反射机制创建Bean实例。
  3. 填充属性:Spring容器注入Bean的依赖。
  4. BeanNameAware、BeanFactoryAware等:如果Bean实现了Aware接口,Spring容器将会调用它们的方法。
  5. BeanPostProcessor前置处理:执行自定义的前置处理逻辑。
  6. InitializingBean的afterPropertiesSet或自定义的init-method:执行初始化逻辑。
  7. BeanPostProcessor后置处理:执行自定义的后置处理逻辑。
  8. DisposableBean的destroy或自定义的destroy-method:当容器关闭时,执行销毁逻辑。

代码演示

以下是一个简单的Spring Bean配置和使用示例:

Java配置方式

java 复制代码
@Configuration
public class AppConfig {

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}

public class MyBean {
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

使用Bean

java 复制代码
public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        MyBean myBean = context.getBean(MyBean.class);
        myBean.doSomething();
    }
}

源码解析

在Spring框架中,BeanFactory是Spring IoC容器的核心接口,它定义了容器的基本功能,包括获取bean、注册bean定义等。ApplicationContextBeanFactory的子接口,提供了更多高级特性,如事件发布、国际化支持等。

当Spring启动时,它会读取配置信息(XML、注解或Java配置),并将这些信息转换为一系列的Bean定义(BeanDefinition)。每个BeanDefinition包含了Bean的详细信息,如类名、作用域、生命周期回调等。

接下来,Spring容器会根据这些Bean定义来创建和管理Bean的实例。在创建Bean实例的过程中,容器会通过反射机制实例化对象,然后通过依赖注入(DI)填充对象的属性。此外,如果Bean实现了特定的接口(如InitializingBeanDisposableBean)或定义了初始化方法和销毁方法,Spring容器也会相应地调用这些方法。

总结

Spring Bean是Spring框架管理的对象,它们是应用程序的基本构建块。通过IoC容器,Spring提供了强大的依赖注入功能,允许开发者以松耦合的方式构建应用程序。Bean的生命周期管理、作用域和其他高级特性使得Spring成为构建企业级应用的理想选择。

相关推荐
RemainderTime32 分钟前
Spring Boot脚手架集成Sa-Token实现生产级RBAC权限管理
java·spring boot·后端·系统架构
llz_1124 小时前
web-第二次课后作业
前端·后端·web
红尘散仙10 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记11 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆11 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪11 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball61612 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_25183645712 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao12 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒13 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端