作为Java程序员还不知道Spring中Bean创建过程和作用?

简介: 作为Java程序员还不知道Spring中Bean创建过程和作用?

1.简单的来说

Spring框架中,Bean的生命周期是指一个Bean从创建到销毁的过程。包括以下几个阶段:

  1. 实例化:当Spring容器启动时,会根据配置文件或注解等方式创建Bean的实例。
  2. 属性赋值:在实例化完成后,Spring容器会自动将相应的属性值赋值给Bean的成员变量。
  3. BeanPostProcessor前置处理器:在属性赋值完成后,Spring容器会调用BeanPostProcessor接口的postProcessBeforeInitialization方法,可以在该方法中对Bean进行一些自定义处理。
  4. 自定义初始化方法:如果需要在初始化时执行一些自定义逻辑,可以在Bean中定义一个初始化方法,并在该方法中编写相应的逻辑。Spring容器会自动调用该方法。
  5. BeanPostProcessor后置处理器:在自定义初始化方法执行完成后,Spring容器会调用BeanPostProcessor接口的postProcessAfterInitialization方法,可以在该方法中对Bean进行一些自定义处理。
  6. 注册监听器:在Bean初始化完成后,Spring容器会将该Bean注册到ApplicationContext中,以便其他组件可以访问和使用该Bean。

Bean的生命周期中,可以进行许多操作,例如自定义初始化和销毁方法、注入属性、设置依赖关系等。

2.Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程,主要分为以下5个部分

1.实例化: 给Bean分配内存空间(对应JVM中的“加载”,这里只是分配了内存);

2.设置属性: 进行Bean的注入和装配;

3.初始化:

执行各种通知;

执行初始化的前置工作;

进行初始化工作(使用注解 @PostConstruct 初始化 或者 使用(xml)init-method 初始化, 前者技术比后者技术先进~);

执行初始化的后置工作;

4.使用Bean

5.销毁Bean

3.代码演示

package com.lp.bean;
 
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.stereotype.Component;
 
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
 
/**
 * @author liu pei
 * @date 2024年01月09日 下午7:36
 * @Description:
 */
@Component
public class BeanTestComponent implements BeanNameAware {
    //执行各种通知
    @Override
    public void setBeanName(String s) {
        System.out.println("执行了通知"+ s);
    }
 
    //初始化的前置和后置方法不能写在这个Bean中!
 
    //执行初始化方法(注解)
    @PostConstruct
    public void postConstruct() {
        System.out.println("通过注解 @PostConstruct 执行了初始化方法");
    }
 
    //使用
    public void useBean() {
        System.out.println("使用Bean");
    }
 
    //销毁
    @PreDestroy
    public void preDestory() {
        System.out.println("执行了销毁方法");
    }
}
package com.lp.bean;
 
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
 
/**
 * @author liu pei
 * @date 2024年01月09日 下午7:34
 * @Description:
 */
@Component
public class BeanTest implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("执行了初始化的前置方法");
        return bean;
    }
 
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("执行了初始化的后置方法");
        return bean;
    }
}

4测试

package com.lp;
 
import com.lp.bean.BeanTestComponent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
 
/**
 * @author liu pei
 * @date 2023年12月05日 下午12:29
 * @Description:
 */
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer{
 
    private static final Logger logger = LoggerFactory.getLogger(DemoApplication.class);
 
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);
        ConfigurableEnvironment env = context.getEnvironment();
 
       
        //获取Bean
        BeanTestComponent beanTestComponent = context.getBean("beanTestComponent", BeanTestComponent.class);
        //使用Bean
        beanTestComponent.useBean();
        //销毁Bean
        beanTestComponent.preDestory();
    }
 
 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(this.getClass());
    }
}
相关文章
|
13天前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
400 58
|
11天前
|
前端开发 Java API
Java入门教程:掌握Spring MVC的双向数据绑定技术
以上步骤展示了如何利用 Spring MVC 实现双向数据绑定:从显示表单、提交表单、验证输入、直至返回结果页面都涉及到不同层次间交互过程,在整个过程都无需手动去编写繁琐代码去手动获取或设置每一项值。
93 20
|
17天前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
94 2
|
2月前
|
前端开发 Java 开发者
Java新手指南:在Spring MVC中使用查询字符串与参数
通过结合实际的需求和业务逻辑,开发者可以灵活地利用这些机制,为用户提供更丰富而高效的Web应用体验。
85 15
|
3月前
|
JSON 前端开发 Java
Java新手指南:如何在Spring MVC中处理请求参数
处理Spring MVC中的请求参数是通过控制器方法中的注解来完成的。这些注解包括 `@RequestParam`, `@PathVariable`, `@ModelAttribute`, `@RequestBody`, `@RequestHeader`, `@Valid`, 和 `@RequestMapping`。使用这些注解可以轻松从HTTP请求中提取所需信息,例如URL参数、表单数据或者JSON请求体,并将其转换成Java对象以供进一步处理。
241 17
|
3月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
402 0
|
2月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
318 0
|
前端开发 Java 数据库
Java面试题 - Spring
Java面试题 - Spring
187 0
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
231 0
|
Java 容器 Spring
【java常见的面试题】什么是Spring IOC 和DI ?
Java基础的面试题【SSM框架篇】
236 0

热门文章

最新文章