Spring @Configuration 注解详解 📅 发布时间:2026/7/13 22:42:49 👁️ 浏览次数: 1. Configuration 概述Configuration是 Spring Framework 中一个核心的注解用于标记一个类为配置类。配置类替代了传统的 XML 配置文件通过 Java 代码的方式来定义和装配 Spring 应用上下文中的 Bean。2. 基本用法在类上添加Configuration注解即可将其声明为一个配置类。配置类中通常包含一个或多个被Bean注解标记的方法这些方法用于创建和配置 Spring 容器管理的 Bean 实例。Configuration public class AppConfig { Bean public MyService myService() { return new MyServiceImpl(); } Bean public DataSource dataSource() { // 配置并返回 DataSource 实例 return new DriverManagerDataSource(jdbc:mysql://localhost:3306/mydb, user, password); } }3. 核心特性与原理3.1 配置类代理CGLIB默认情况下Spring 会使用 CGLIB 为Configuration类创建代理。这确保了配置类内部方法间的调用会被拦截从而保证Bean方法的单例性。例如Configuration public class ConfigA { Bean public BeanA beanA() { return new BeanA(beanB()); // 这里调用 beanB() 会返回容器中的单例而非创建新实例 } Bean public BeanB beanB() { return new BeanB(); } }3.2 Bean 注解方法在配置类中使用Bean注解的方法相当于 XML 配置中的bean元素。方法名默认作为 Bean 的名称返回值类型作为 Bean 的类型。3.3 组合配置Import可以使用Import注解导入其他配置类实现配置的模块化和组合。Configuration Import({DatabaseConfig.class, SecurityConfig.class}) public class MainConfig { // 主配置类 }4. 进阶用法4.1 条件化配置Conditional结合Conditional及其衍生注解如ConditionalOnClass,ConditionalOnProperty可以根据特定条件决定是否创建某个 Bean。4.2 配置属性绑定ConfigurationProperties与ConfigurationProperties注解结合可以轻松地将外部配置如 application.properties绑定到 Java Bean 上。4.3 简化配置ComponentScan在配置类上添加ComponentScan注解可以指定 Spring 扫描特定包路径下的组件Component,Service,Repository,Controller。5. Configuration vs Component虽然Configuration本身也被Component元注解标注但二者有重要区别Configuration语义上表示这是一个配置类其内部的Bean方法会通过代理确保 Bean 的单例性。Component表示一个通用的 Spring 组件。如果一个普通Component类中包含Bean方法这些方法间的调用不会通过代理可能导致每次调用都创建新的实例“lite mode”。6. 最佳实践与常见问题保持配置类单一职责每个配置类应专注于一个特定领域的配置如数据源、MVC、安全。避免在 Bean 方法中编写复杂业务逻辑配置方法应专注于 Bean 的创建和依赖注入。注意循环依赖配置类之间的Bean方法如果相互引用可能产生循环依赖需通过设计或使用Lazy注解解决。测试配置类使用SpringBootTest或AnnotationConfigApplicationContext对配置类进行集成测试。7. 总结Configuration是现代 Spring 应用尤其是 Spring Boot进行依赖注入和 Bean 配置的基石。它提供了类型安全、易于重构和测试的配置方式是替代 XML 配置的首选方案。理解其代理机制、与Bean的配合以及相关的组合注解是掌握 Spring 核心容器的关键。
C语言单链表实战:3种插入与2种删除操作的时间复杂度与内存泄漏陷阱 C语言单链表实战:3种插入与2种删除操作的时间复杂度与内存泄漏陷阱链表作为基础数据结构,在实际开发中频繁出现,但真正掌握其性能特性和内存管理细节的开发者却不多。本文将深入分析单链表的操作效率与常见陷阱,通过量化对比和实战… 2026/7/13 22:40:48
手机复制AI代码为何总报错?四大断层与七步净化法 1. 项目概述:手机端大模型对话工具里的代码复制,到底在解决什么问题?“手机版ChatGPT和Gemini里复制代码怎么用”——这个标题看似简单,但背后藏着大量真实用户每天都在遭遇的、被官方文档刻意忽略的“最后一公里”困境。我从2023… 2026/7/13 22:38:48
Anaconda 2024.10 跨平台安装:Windows/macOS/Linux 三系统 5 步配置对比 Anaconda 2024.10 三系统安装全攻略:从环境配置到避坑指南如果你是一名需要在不同操作系统间切换的开发者或学生,Anaconda无疑是管理Python环境的利器。2024.10版本带来了更流畅的跨平台体验,但Windows、macOS和Linux三大系统的安装细节却各有… 2026/7/13 22:38:48
Partial Conversion 在 MLIR 的异构多级降级(Lowering)管线中,将整个模块(Module)从一个高层方言无脑、一刀切地全部翻译到底层方言往往是不切实际的。 例如,当我们试图把自研的 NPU 高层算子图逐步向硬件靠拢时,我… 2026/7/14 0:09:15
`grpcio-tools` 是 gRPC 官方提供的 Python 代码生成工具包 grpcio-tools 是 gRPC 官方提供的 Python 代码生成工具包,用于将 Protocol Buffer(.proto)文件编译为 Python 的 gRPC 客户端和服务端存根(stub)代码。它基于 protoc 编译器,并通过插件机制调用 Python 特定… 2026/7/14 0:07:15
研究生双选信息发布系统开题报告 一、课题研究背景 随着我国研究生教育规模化发展,研究生招生数量持续增长,校内导师与研究生双向选择成为高校研究生培养的首要核心环节,直接影响研究生培养质量、科研团队建设与学科发展水平。研究生双选工作是衔接新生入学与科研培养的关键流… 2026/7/14 0:07:15
2026从计划员到主管,生产管理者学数据分析有用吗? 一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&… 2026/7/14 0:05:14
2026普通文员学数据分析的价值 一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a… 2026/7/14 0:05:14
XUnity.AutoTranslator 游戏实时翻译插件:从原理到实战的完整指南 1. 项目概述:当游戏语言成为一堵墙作为一名玩了十几年日系、欧美独立游戏的“老油条”,我太懂那种面对一款心仪已久、画风玩法都戳中G点的游戏,却因为语言不通而望而却步的痛了。尤其是那些基于Unity引擎开发的、体量不大但内容精良的作品&am… 2026/7/14 0:05:14
2026普通文员学数据分析的价值 一、2026年普通文员学习数据分析的必要性随着数字化转型加速,数据分析技能正逐渐成为职场基础能力。普通文员学习数据分析可以提升工作效率、增强竞争力,并为职业转型提供更多可能性。二、数据分析对文员的价值自动化办公:通过数据分析工具&a… 2026/7/14 0:05:14
2026从计划员到主管,生产管理者学数据分析有用吗? 一、生产管理领域的职业发展路径 从计划员到主管的角色转变,是生产管理者职业发展的典型路径。计划员主要负责生产排程、库存管理和资源协调等基础工作,而主管则需要承担团队管理、决策支持和效率优化等更高级别的职责。这种转变不仅仅是职位的提升&… 2026/7/14 0:05:14
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/13 9:31:08
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/13 2:34:55