当前位置: 首页 > news >正文

Spring注解驱动开发:从XML到注解的完美蜕变

一、前言:为什么要从XML转向注解?

传统的Spring框架依赖XML配置文件来管理Bean和依赖关系,但随着项目规模扩大,XML配置变得臃肿且难以维护。Spring 2.5引入的注解驱动开发彻底改变了这一局面,让代码更加简洁、直观。

本文将基于实际代码示例,带你全面掌握Spring注解开发的核心技巧!

二、项目结构概览

先来看一下我们的示例项目结构:

org.xsy
├── demo
│   ├── Demo.java      # 基础组件类
│   └── User.java      # 使用注解的实体类
└── xsy.java          # 测试类

三、详解核心注解

1. 组件注册注解

Spring提供了四个层次化的注解来注册Bean:

@Component        // 通用组件注解
@Controller       // 表现层组件注解
@Service          // 业务层组件注解
@Repository       // 持久层组件注解

这些注解本质上没有功能区别,但通过命名区分层次,提高了代码的可读性和维护性。

2. 依赖注入注解

(1) @Value - 普通类型注入
@Value("李华")     // 直接注入字符串值
private String name;@Value("10")      // 注入整型值
private int age;

@Value注解用于注入基本数据类型和String类型,支持SpEL表达式和属性占位符。

(2) 对象类型注入的三种方式

​方式一:@Autowired + @Qualifier​

@Autowired        // 按类型自动装配
@Qualifier("demo") // 指定Bean名称
private Demo demo;

方式二:@Resource​

@Resource(name = "demo") // 按名称装配(推荐)
private Demo demo;

方式三:XML配置方式​

<bean id="demo" class="org.xsy.demo.Demo"/>
<bean id="user" class="org.xsy.demo.User"><property name="name" value="张三"/><property name="age" value="20"/><property name="demo" ref="demo"/>
</bean>

3. 配置类注解

(1) XML配置方式
<!-- 开启注解扫描,扫描org.xsy包下的所有组件 -->
<context:component-scan base-package="org.xsy"/>
(2) 纯注解方式(Spring Boot推荐)
@Configuration      // 声明为配置类
@ComponentScan("org.xsy") // 配置组件扫描路径
public class AppConfig {
}

四、实战代码解析

1. 基础组件类

package org.xsy.demo;import org.springframework.stereotype.Component;@Component("demo") // 注册为Bean,指定ID为"demo"
public class Demo {public void hellow(){System.out.println("xsy");}
}

2. 使用注解的实体类

package org.xsy.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;@Component("xx") // 注册为Bean,指定ID为"xx"
public class User {@Value("李华")private String name;@Value("10")private int age;@Resource(name = "demo") // 注入名为"demo"的Beanprivate Demo demo;@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", demo=" + demo +'}';}public void run(){System.out.println("Hello User");}
}

3. 测试类

package org.xsy;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.xsy.demo.User;public class xsy {public static void main(String[] args) {// 创建Spring容器,加载配置文件ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 获取User实例User user = (User) context.getBean("xx");System.out.println(user);}
}

五、注解 vs XML:如何选择?

特性

注解配置

XML配置

定义

在源码中定义

在外部XML文件中定义

耦合度

与代码耦合

与代码解耦

可读性

直观,一目了然

需要在文件间切换

修改是否需重新编译

适合场景

中小项目,需求稳定

大型项目,需求频繁变化

​推荐做法​​:混合使用!基础配置使用XML,业务组件使用注解。

六、最佳实践和常见坑点

  1. ​@Autowired的歧义性​​:当有多个相同类型Bean时,需配合@Qualifier使用

  2. ​@Resource vs @Autowired​​:推荐使用@Resource,因为它按名称注入,更符合直觉

  3. ​注解扫描范围​​:不宜过大,否则会影响启动性能

  4. ​ID命名规范​​:使用有意义的Bean ID,提高代码可读性

七、总结

Spring注解驱动开发带来了巨大的便利:

  1. ​简化配置​​:告别繁琐的XML配置

  2. ​提高可读性​​:注解与代码在一起,直观清晰

  3. ​增强可维护性​​:修改方便,不易出错

  4. ​促进解耦​​:依赖注入彻底解耦组件间的依赖关系

http://www.dtcms.com/a/392232.html

相关文章:

  • 【Spring AI】第三弹:深入解析 RAG 核心特性、关键流程、基于 Spring AI + 知识库实现 RAG 检索增强器
  • 【剪映】官方下载方式?【图文详解】电脑版下载?正版安全下载?最新版下载?
  • 《UE5_C++多人TPS完整教程》学习笔记56 ——《P57 未装备武器的蹲伏(Crouch Unequipped)》
  • AI人工智能训练师五级(初级)考试题库(1)1~100题
  • 【Python精讲 02】编程第一课:彻底掌握Python变量、数字、字符串与布尔值
  • Unity2D-Sprite
  • 本地实现视频分析与总结工具
  • Vue 开发常见报错及解决方案指南
  • Linux 进程状态
  • 基于自然语言处理的文本敏感内容检测系统的设计与实现
  • JDBC小白入门项目创建 IDEA 空项目+模块配置 JavaWeb MySQL
  • 笔记 Docker(离线)安装(24.0.9)
  • Docker-Android+cpolar:移动开发的环境革命
  • uniapp首先对战匹配简单实现
  • [bitcoin白皮书_2] 隐私 | 计算
  • 【杂谈】-重构注意力经济:人工智能重塑短视频内容生态
  • 【杂谈】Godot 4.5下载指南
  • CICD工具选型,Jenkins VS Arbess哪一款更好用?
  • iOS 26 续航测试实战,如何测电池掉电、Adaptive Power 模式功耗、新系统更新后的耗电差异与 App 续航优化指南
  • 数据挖掘与KDD:从理论到实践的最佳流程解析
  • 深入理解Linux网络中的Socket网络套接字——基础概念与核心实现
  • Spark专题-第二部分:Spark SQL 入门(4)-算子介绍-Exchange
  • Spark专题-第二部分:Spark SQL 入门(3)-算子介绍-Aggregate
  • Go基础:Go语言中集合详解(包括:数组、切片、Map、列表等)
  • 《算法闯关指南:优选算法--滑动窗口》--09长度最小的子数串,10无重复字符的最长字串
  • 请卸载xshell,一款国产的终端工具,界面漂亮,功能强大,支持win,mac,linux平台,安全免费
  • 用批处理文件实现Excel和word文件的重造
  • unseping(反序列化漏洞)
  • 麒麟系统 word转为pdf
  • 【Codex CLI 配置指南(小白速通版)】