news 2026/4/11 18:42:28

关于bean的相关知识点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于bean的相关知识点

在javase阶段,我们知道了bean的庞大体系
继承,实现。抽象类,多态之类的

1. 核心概念澄清

你说的对,也不完全对:

  • 是的,Bean本质上就是一个Java类的实例(对象)
  • 但在Spring中,Bean不仅仅是简单的类实例,它是由SpringIoC容器管理的完整对象

2. 普通Java对象的生命周期

// 普通Java对象publicclassUserService{publicUserService(){// 1. 构造}publicvoidinit(){// 需要手动调用}publicvoiddestroy(){// 需要手动调用}}// 使用方式UserServiceservice=newUserService();// 自己控制创建时机service.init();// 自己控制初始化// 使用...service.destroy();// 自己控制销毁

特点:

  • 完全由开发者控制生命周期
  • 垃圾回收器负责最终清理
  • 没有统一的依赖注入
  • 没有AOP增强

3. Spring Bean的生命周期

Spring为Bean提供了完整、标准化的生命周期管理

完整生命周期(简化版):

1. Bean定义加载 → 2. 实例化 → 3. 属性赋值 → 4. BeanNameAware → 5. BeanFactoryAware → 6. ApplicationContextAware → 7. @PostConstruct → 8. InitializingBean → 9. 自定义init方法 → 10. Bean就绪可用 → 11. @PreDestroy → 12. DisposableBean → 13. 自定义destroy方法

代码示例:

@ComponentpublicclassUserServiceimplementsBeanNameAware,BeanFactoryAware,ApplicationContextAware,InitializingBean,DisposableBean{// 1. 构造方法(Spring调用)publicUserService(){System.out.println("1. 实例化");}// 2. 属性注入(Spring自动)@AutowiredprivateUserDaouserDao;// 3. BeanNameAware@OverridepublicvoidsetBeanName(Stringname){System.out.println("3. 设置Bean名称: "+name);}// 4. BeanFactoryAware@OverridepublicvoidsetBeanFactory(BeanFactorybeanFactory){System.out.println("4. 设置BeanFactory");}// 5. ApplicationContextAware@OverridepublicvoidsetApplicationContext(ApplicationContextcontext){System.out.println("5. 设置ApplicationContext");}// 6. @PostConstruct@PostConstructpublicvoidpostConstruct(){System.out.println("6. @PostConstruct");}// 7. InitializingBean@OverridepublicvoidafterPropertiesSet(){System.out.println("7. afterPropertiesSet");}// 8. 自定义init方法@Bean(initMethod="customInit")publicvoidcustomInit(){System.out.println("8. 自定义init方法");}// 9. 使用阶段...// 10. @PreDestroy@PreDestroypublicvoidpreDestroy(){System.out.println("10. @PreDestroy");}// 11. DisposableBean@Overridepublicvoiddestroy(){System.out.println("11. DisposableBean.destroy()");}// 12. 自定义destroy方法@Bean(destroyMethod="customDestroy")publicvoidcustomDestroy(){System.out.println("12. 自定义destroy方法");}}

4. 关键区别对比

方面普通Java对象Spring Bean
创建控制开发者显式newSpring容器负责
依赖注入手动setter/构造器自动注入(@Autowired)
初始化手动调用init方法多种初始化机制
作用域单一作用域多种作用域(singleton, prototype, request等)
AOP增强需要手动实现自动代理,实现横切关注点
销毁管理依赖GC或手动调用统一生命周期管理
配置方式硬编码多种配置(XML、注解、JavaConfig)

5. Spring Bean的特殊能力

A. 依赖注入(DI)

@ComponentpublicclassOrderService{// Spring自动注入依赖@AutowiredprivatePaymentServicepaymentService;@AutowiredprivateUserServiceuserService;}

B. AOP代理

@ServicepublicclassProductService{@Transactional// 自动事务管理publicvoidsaveProduct(Productproduct){// 这个方法会被Spring AOP增强}}

C. 作用域管理

@Component@Scope("prototype")// 每次获取都是新实例publicclassShoppingCart{// ...}@Component@Scope("singleton")// 默认,单例publicclassConfigService{// ...}

D. 条件化创建

@Component@ConditionalOnProperty(name="feature.enabled",havingValue="true")publicclassFeatureService{// 只有配置了feature.enabled=true才创建}

6. 实际意义

为什么这种区别重要?

  1. 控制反转(IoC):应用的控制权从开发者转移到了框架
  2. 关注点分离:开发者专注于业务逻辑,框架负责基础设施
  3. 一致性:所有Bean都有标准化的生命周期
  4. 可扩展性:通过生命周期钩子可以轻松扩展功能
  5. 测试友好:依赖注入让单元测试更容易

7. 简单比喻

  • 普通Java对象:像自己买菜、洗菜、炒菜、洗碗
  • Spring Bean:像去餐厅点菜,餐厅负责所有流程管理

总结:Spring Bean确实是一个Java类的实例,但它是被Spring容器赋予了额外能力、按照特定生命周期管理的"增强版"对象。这种管理带来了依赖注入、AOP、统一配置等诸多便利,是现代Java应用开发的重要基石。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 22:34:18

YimMenu完全攻略:免费GTA5辅助工具快速配置与使用指南

YimMenu完全攻略:免费GTA5辅助工具快速配置与使用指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimM…

作者头像 李华
网站建设 2026/4/10 16:06:33

基于自然语言处理的智能CAD建模系统技术解析

基于自然语言处理的智能CAD建模系统技术解析 【免费下载链接】text-to-cad-ui A lightweight UI for interfacing with the Zoo text-to-cad API, built with SvelteKit. 项目地址: https://gitcode.com/gh_mirrors/te/text-to-cad-ui Text-to-CAD技术通过深度学习算法将…

作者头像 李华
网站建设 2026/4/10 9:41:19

BERT智能语义填空功能测评:轻量级模型如何实现高精度

BERT智能语义填空功能测评:轻量级模型如何实现高精度 你有没有遇到过这样的场景?一句话只差一个词,但就是想不起来;或者读到“山重水复疑无路,柳暗花明又一村”时,突然好奇:如果把“村”换成 […

作者头像 李华
网站建设 2026/4/8 18:54:22

Qwen3-4B支持哪些语言?多语种生成实测与部署建议

Qwen3-4B支持哪些语言?多语种生成实测与部署建议 1. 多语言能力全面升级,Qwen3-4B到底能用在哪些场景? 你有没有遇到过这样的问题:想用大模型写一封英文邮件,结果生成的内容语法生硬;或者让模型翻译一段小…

作者头像 李华
网站建设 2026/4/7 13:19:49

铜钟音乐:纯净音乐体验的全新定义

铜钟音乐:纯净音乐体验的全新定义 【免费下载链接】tonzhon-music 铜钟 (Tonzhon.com): 免费听歌; 没有直播, 社交, 广告, 干扰; 简洁纯粹, 资源丰富, 体验独特!(密码重置功能已回归) 项目地址: https://gitcode.com/GitHub_Trending/to/tonzhon-music…

作者头像 李华
网站建设 2026/4/8 13:07:19

开发者工具箱更新:5个提升效率的Qwen部署技巧

开发者工具箱更新:5个提升效率的Qwen部署技巧 你是不是也遇到过这样的情况:好不容易找到一个适合本地开发的小型推理模型,结果卡在部署环节——环境配不起来、GPU显存爆了、服务起不来、或者调用时响应慢得像在等泡面?今天要聊的…

作者头像 李华