Spring中@Bean的生命周期和@Value赋值的理解

Python学生管理系统+MySQL+tkinter+pyinstaller(终章)(1) 文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 阅读详情

@Bean的生命周期
bean创建—初始化—销毁
容器管理bean的生命周期
我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法
构造(对象创建)
单实例:在容器启动的时候创建对象
多实例:在每次获取的时候创建对象

初始化:
对象创建完成,并赋值好,调用初始化方法
销毁:
容器关闭的时候销毁

1.指定初始化和销毁方法;
以前基于配置,有init-method、destory-method属性去配置方法,方法必须没有参数,但是可以抛任何异常

public class Car{
    public Car(){
    }
    
    public void init(){}

    public void destory(){}
}

@Configuration
public class MyConfig{
    @Bean
    public Car car{
        return new Car();
    }
}

现在通过@Bean指定init-method、destory-method
2.通过让Bean实现InitializingBean接口(定义初始化逻辑)
DisposableBean接口(定义销毁逻辑)

@Component
public class Cat implements InitializingBean, DisposableBean {
    public Cat(){}
    //在容器关闭的时候进行调用
    @Override
    public void destroy() throws Exception {

    }
    //在Bean创建完成,并且属性都赋值好后调用
    @Override
    public void afterPropertiesSet() throws Exception {

    }
}

3.@PostConstruct和@PreDestory;使用JSR250
@PostConstruct:在bean创建完成并且属性赋值好后,来执行初始化方法;标注在方法上
@PreDestory:在容器销毁bean之前通知我们进行清理工作

public class Dog{
    public Dog(){}

    //对象创建并赋值后调用
    @PostConstruct
    public void init(){}

    //容器移除对象之前调用
    @PreDestory
    public void destory(){}
}

4.BeanPostProcessor接口:bean的后置处理器
在bean初始化前后进行一些处理工作
postProcessBeforeInitialization:初始化之前进行后置处理工作
postProcessAfterInitialization:初始化之后进行后置处理工作
Spring底层对BeanPostProcessor的使用:
bean赋值,注入其他组件,@Autowired,生命周期注解功能,@Async,XXX等等的功能,都是通过BeanPostProcessor来完成的

@Value赋值:
1.基本数值
2.可以写SpEL;#{}
3.可以写;取出配置文件(运行环境变量)中的值先使用@PropertySource读取外部配置文件中的K/V保存到运行环境变量中;加载完外部的配置文件以后使用{};取出配置文件(运行环境变量)中的值 先使用@PropertySource读取外部配置文件中的K/V保存到运行环境变量中;加载完外部的配置文件以后使用;取出配置文件(运行环境变量)中的值先使用@PropertySource读取外部配置文件中的K/V保存到运行环境变量中;加载完外部的配置文件以后使用{}取出配置文件的值

@PropertySource(value={"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues{
    @Bean
    public Person person(){
        return new Person();
    }
}

public class Person{
    @Value("张三")
    private String name;
    @Value("#{20-2}")
    private Integer age;
    @Value("${person.nickName}")
    private String nickName;
}

person.properties文件内容
person.nickName=......

自动装配:
Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值;
1.@Autowired:自动注入
1).默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);
2).如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找
applicationContext.getBean(“bookDao”);
3).@Qualifier(“bookDao”):使用@Qualifier指定需要装配的组件的id,而不是使用属性名
4).自动装配默认一定要将属性赋值好,没有就会报错;
5).@Primary:让Spring进行自动装配的时候,默认会使用首选的bean;
也可以继续使用@Qualifier指定需要装配的bean的名字

2.Spring还支持使用@Resource(JSR250)和@Inject(JSR330)【Java规范的注解】
@Resource:可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的
@Resource(name=“bookDao2”)
没有支持@Primary功能,没有支持@Autowired(require=“false”);
@Inject:要使用此注解需要导入依赖,javax.inject,和Autowired的功能一样,但是没有require=false的功能

@Autowired是Spring定义的,而@Resource和@Inject是Java的规范
3.@Autowired:可以标注在构造器、参数、方法、属性上;都是从容器中获取参数组件的值
1)标注在方法上:Spring容器创建当前对象,就会调用方法,完成赋值;方法使用的参数,自定义类型的值从ioc容器中进行获取

@Autowired
public void setCar(Car car){
    this.car = car;
}

@Bean标注的方法创建对象的时候,方法参数的值从容器中获取

@Bean
public Color color(Car car){    //car从容器中获取
    Color color = new Color();
    color.setCar(car);
    return color;
}

默认加在ioc容器中的组件,容器启动会调用无参构造器创建对象,再进行初始化赋值等操作
构造器要用的组件、参数,也是从容器中获取的
2)标注在构造器:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是可以自动从容器中获取
3)放在参数位置;

4.自定义组件想要使用Spring容器底层的一些组件(ApplicationContext、BeanFactory、XXX)
自定义组件实现XXXAware接口:在创建对象的时候,会调用接口规定的方法注入相关组件;参照Aware接口设计
把Spring底层一些组件注入到自定义的Bean中;
XXXAware的功能是使用XXXProcessor(后置处理器)来实现的;
ApplicationContextAware===>ApplicationContextAwareProcessor

Spring中的依赖注入注解、第三方资源配置管理@Bean注解、XML配置 和 注解配置的区别(Spring纯注解开发中篇) 文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习。 阅读详情

相关推荐

深入理解 Spring @Bean 注解

定义@Bean是一个方法级别的注解,用于指示一个方法产生一个由 Spring IoC 容器管理的 Bean。这个注解通常与注解一起使用,类是一个特殊的类,旨在通过定义 Bean 来配置应用程序上下文。作用提供了一种灵活的方式来创建和管理 Bean,允许开发者完全控制 Bean 的创建过程。支持复杂的初始化逻辑,如依赖注入、条件判断等。@Bean注解提供了一种灵活且强大的方式来定义和管理 Spring 容器中的 Bean。结合使用,可以实现复杂的应用程序上下文配置。

h a 6 6 6 c k 为 你解决复杂难题! 371

spring boot里@Value和@bean执行顺序问题

spring boot里@Value和@bean执行顺序问题 文章目录spring boot里@Value和@bean执行顺序问题前言情况一:不同文件下情况二:同一文件下使用Environment取代@Value,它直接取配置文件 前言 正常情况下@Bean比@Value先执行,但有个条件,@Bean和@Value不在同一个文件里。 如果想控件这个先后顺序有如下3种情况。 下面代码使用kotlin...

陈袁的博客 1万+

Hermes Agent vs OpenClaw:2026 年开源 AI Agent 框架深度对比

两款 2026 年最受关注的开源 AI Agent 框架,一个主打「自进化」,一个聚焦「网关路由」——它们究竟有何不同?本文将从架构原理、核心机制、使用方式到适用场景,为你全面拆解。无论你是 AI 研究者、开发者,还是想用 AI 提升工作效率的个人用户,这篇文章都将帮助你做出最适合的选择

程序猿_三产 3747

@Value和@Bean注解的执行顺序问题

Springboot中使用@Configruation和@Bean一起将Bean注册到ioc容器中,而@Value常用于将yml配置文件中的配置信息注入到类的成员变量中。当@Configruation、@Bean和@Value出现在同一个类中时,@Bean会比@Value先执行,这会导致当@Bean注解的方法中用到@Value注解的成员变量时,无法注入(null)的情况。例如在为Feign创建配置类,以实现Feign的权限验证时,需要将yml文件中的用户名和密码注入到配置类的成员变量中,@Bean注解方法则

qq_22339269的博客 4994

设计空间探索:乘法器设计的面积、延时、功耗优化

4-2压缩器在减少延迟方面表现出色,适用于需要快速压缩的场景。6-2压缩器在资源占用方面具有优势,能够减少压缩树的层次数量和逻辑门数量。优化功耗:通过合理组合不同类型的压缩器,可以在延迟、资源占用和功耗之间找到最佳平衡点,从而实现优化的设计目标。###参考资料。

SiArch的博客 1879

STC8单片机低功耗延时优化实践:从循环等待到定时唤醒

本文深入探讨了STC8单片机低功耗延时优化的核心方法,即利用掉电唤醒定时器(WKT)替代传统的循环等待,实现从“空转耗电”到“定时唤醒”的转变。通过实战代码演示了如何编写低功耗延时函数,将待机电流从mA级降至μA级,并分析了精度、唤醒时间等关键权衡点,为电池供电的物联网设备提供了有效的续航优化方案。

pea55的博客 324

@Bean的value和name属性

@Bean中的name和value属性 和 配置文件中的bean标签的name属性有同样的功能。@Bean配置的类的默认id是方法的名称,但是我们可以通过value或者name给这个bean取别名。注意:value和name属性不能并存。 而且如果配置了value或者name,那么我们将无法在通过方法名称获取这个bean了。例如: 1 //配置ArticleService对象 2 @Bean(value="aservice") 3 //@Bean(name="aservi

zhijingzhi的博客 5349

大语言模型(LLM)在组合优化中的新突破:LLM-LNS与FunSearch性能对比

本文深入探讨了大语言模型(LLM)在组合优化中的创新应用,重点对比了LLM-LNS与FunSearch两种方法的性能差异。研究表明,LLM-LNS在物流路径规划、资源调度等场景中展现出显著优势,其双层自演化架构能有效平衡探索与利用,相比传统方法提升效率约43%。文章还提供了实践选择指南,帮助开发者根据具体需求选用合适的技术方案。

weixin_42526415的博客 406

Spring Boot中的@ConfigurationProperties,@Value和@Bean注解讲解

一、这篇博客主要是介绍Srping Boot中的@ConfigurationProperties,@Value和@Bean这三个注解的用法,以及@Value获取值与@ConfigurationProperties的区别。 二、@ConfigurationProperties,@Value作用 【1】@ConfigurationProperties是spring-boot 提供该注解将配置文件的值映...

weixin_42146366的博客 3197

AI安全攻防:十六进制编码与表情符号如何绕过ChatGPT安全限制

在人工智能安全领域,提示词工程是影响大语言模型行为的关键技术。其核心原理在于通过精心设计的输入文本,引导模型生成特定内容或执行特定任务。这项技术的价值在于能够深入探究模型的理解机制与决策边界,对于模型优化、安全测试及功能开发具有重要意义。在实际应用场景中,研究人员常利用编码转换、符号插入等方法构造输入,以测试模型安全护栏的鲁棒性。近期,一种结合十六进制编码与表情符号的组合攻击手法受到关注,该方法通过信息伪装与语义干扰,试图绕过模型内置的内容过滤机制,这凸显了当前AI安全在输入预处理与语义理解协同防御上面临的

weixin_30633405的博客 449

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

【YOLO11改进 - C3k2融合】C3k2融合动态蛇形卷积(Dynamic Snake Convolution)用于管状结构分割任务

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 517

@Bean注解的使用和详解

@Bean:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。 SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需...

学源客的博客 6万+

【AI大模型应用开发】【RAG评估】0. 综述:一文了解RAG评估方法、工具与指标

本文主要总结了当前比较流行的RAG评估方法和指标。当前AI技术的快速发展,RAG和RAG评估是当前比较有前景的发展方向,不断有新的评估工具和理论被提出,让我们持续跟进,了解这些工具和理论,从而在使用时知道如何选择。

同学小张的博客 6826

Spring @Configuration和@Bean的用法和理解

Sprign的配置Bean的方式: 1、第一种自己写的类,Controller,Service。 用@controller @service即可 2、第二种,集成其它框架,比如集成shiro权限框架,集成mybatis分页插件PageHelper,第三方框架的核心类都要交于Spring大管家管理 @Configuration可理解为用spring的时候xml里面的<beans>标...

MayMatrix 的博客 1873

【自适应调制】自适应调制解调通信链路误码率matlab仿真与分析

BPSK中的B是“Binary”的意思,也就是有两个变化状态,比如说相位上的“+90°(代表1)、-90°(代表0)”,一个状态代表的就是一个比特。QPSK的“Q”是“Quadrature”的意思,有四个变化状态,如相位上的“+45°(代表00)、-45°(代表11)、+135°(代表10)、-135°(代表01)”,那么一个状态就代表两个比特的信息,如图2所示。同理8PSK的一个状态代表三个比特。但是功率资源并不是无限的,基站总的发射功率是一定的,为了充分利用所有的功率,采用的就是AMC技术。

FPGA/MATLAB学习教程/源码/项目合作开发 1833

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

一文理解Spring IOC 中的@Configuration和@Bean

介绍@Configuration和@Bean注解的作用、使用以及关系

qq_63955073的博客 1124

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring Bean生命周期:@Component、@Value与@PostConstruct执行顺序详解

在Java企业级开发中,依赖注入和控制反转是Spring框架的核心概念,它们通过管理对象的创建与依赖关系简化了开发。其原理基于Bean的生命周期管理,容器按照特定阶段实例化、注入属性并执行初始化回调。理解这一机制的技术价值在于能够构建更稳定、可维护的应用,避免因组件初始化时机不当导致的运行时错误。典型的应用场景包括微服务配置加载、组件间依赖解析以及启动时资源初始化。本文聚焦于Spring Bean生命周期中的关键环节,深入解析@Component、@Value和@PostConstruct等常用注解的执行顺

weixin_33743661的博客 352

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

spring @Bean和@Order 官方doc理解

今天阅读了spring的官方代码,(大概)理解了@Bean和@Order如何使用。 @Bean 官方代码解读: 0、@Bean的注入,用于表示这个bean被spring容器管理(创建、销毁)(官方英文:Indicates that a method produces a bean to be managed by the Spring container. )。 1、如果有相同的bean,...

weixin_30628077的博客 2372

@Component 和 @Bean 的区别

Spring框架中的@Component和@Bean是两种常用的注解,用于定义和管理Spring容器中的Bean。@Component注解用于标记简单的POJO类,Spring会自动扫描并实例化这些类;@Bean注解用于在配置类中手动定义复杂的Bean配置,适用于需要手动配置和管理的Bean。通过本文的学习,你应该能够更好地理解这两种注解的区别及其使用场景,并能够在实际编程中应用这些知识。

xycxycooo的博客 2365

@bean 什么时候执行_Spring中bean的生命周期

关注公众号:小李不秃 在Spring容器中,主要是对bean进行管理的,而我们创建的bean其实是有对应的生命周期,我们需要对这个生命周期有一个了解。其实Spring这个对bean的生命周期就是对传统的java的生命周期给复杂化一些。那下面我就了解下bean的生命周期。bean的生命周期(网上的图)bean的生命周期 在Spring中bean的生命周期就像我们在上面的图...

weixin_35315373的博客 1837

@Configuration和@Bean的用法和理解

  1、第一种自己写的类,Controller,Service。 用@controller @service即可 2、第二种,集成其它框架,比如集成shiro权限框架,集成mybatis分页插件PageHelper,第三方框架的核心类都要交于Spring大管家管理 @Configuration可理解为用spring的时候xml里面的&lt;beans&gt;标签 @Bean可理解为用spr...

liuyinfei_java的博客 3万+

@Bean在@Configuration和在@Component中的区别

@Bean在@Configuration和在@Component中的区别 2015年11月16日 14:54:52 ttjxtjx 阅读数:22118 标签: spring Bean Component Configuration 更多 个人分类: Spring 疑问由来 首先看一下Spring官方文档是怎么说的:   The @Bean methods in a Spring co...

f45056231p的博客 1803

spring中@configuration和@bean 关系全了

1、第一种自己写的类,Controller,Service。 用@controller @service即可2、第二种,集成其它框架,比如集成shiro权限框架,集成mybatis分页插件PageHelper,第三方框架的核心类都要交于Spring大管家管理@Configuration可理解为用spring的时候xml里面的<beans>标签@Bean可理解为用spring的...

weixin_30267785的博客 822

Spring之@Bean注解

当注入的依赖存在多个候选者,如果候选者的 autowireCandidate 属性为 false,则不加入候选。指定 beanName ,未指定则为方法名。

好记性不如烂笔头 1174

Spring容器生命周期

摘要:本文详细介绍了Spring容器生命周期中的关键组件和回调机制。主要内容包括@Bean注解的初始化和销毁方法配置、InitializingBean和DisposableBean接口的使用、@PostConstruct和@PreDestroy注解的执行时机,以及BeanPostProcessor接口的扩展功能。通过代码示例和时序图展示了各组件在生命周期中的执行顺序和优先级关系,帮助开发者理解Spring容器管理Bean的完整流程。文章参考了尚硅谷的SpringBoot容器视频教程,适合Spring初学者系

南部余额的博客 1139

Spring之@Configuraion和@Bean详解

前言 Spring3.0之前要使用Spring必须要有一个xml配置文件,而Spring3.0之后注解慢慢登上舞台,通过注解@Configuration和@Bean可以完全搞定。此时,注解和xml配置形成了相互协作与竞争的关系。随着Springboot的推广,注解的使用在Spring中大放光彩,xml的辉煌一去不返。通过注解,简化了配置,提升了编码效率。 Spring 3.0新增了另外两个实现类:AnnotationConfigApplicationContext 和 AnnotationConfigW

damo的博客 794
上一篇: Spring常用的几个注解@Configuration、@Bean、@ComponentScan
下一篇: git常见报错解决办法,fatal: the remote end hung up unexpectedly
明明在学JAVA
博客等级 码龄17年 58粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值