Spring 中的常用注解

devtools/2025/1/17 5:10:16/

Spring 作为 Java 企业级开发中最广泛使用的框架之一,以其强大的功能和灵活性为开发者提供了高效的开发体验。在 Spring 中,注解(Annotation)是其核心机制之一,它简化了配置文件的繁琐操作,通过声明的方式实现了依赖注入等功能。

本篇文章将介绍 Spring 框架中一些常用的注解,并结合实际场景详细说明它们的使用方法与作用。这不仅可以帮助初学者快速掌握 Spring 的基本用法,也能为有经验的开发者提供一个参考,帮助在实际开发中更高效地使用这些工具。

通过对注解的深入了解,你将能够更加轻松地掌控 Spring 框架,提高开发效率,为企业级应用开发提供强有力的支持。让我们一起走进 Spring 注解的世界,探索它的奥秘!


文章目录

      • 1、核心注解:Bean、配置和自动扫描
        • 1.1、@Configuration
        • 1.2、@Bean
        • 2.3、@Component
        • 2.4、@ComponentScan
      • 2、依赖注入相关的注解
        • 2.1、@Autowired
        • 2.2、@Qualifier
        • 2.3、@Primary
        • 2.4、@Value
      • 3、生命周期相关
        • 3.1、@PostConstruct
        • 3.2、@PreDestroy
      • 4、其他常用注解
        • 4.1、@Transactional
        • 4.2、@Scope
        • 4.3、@Import
        • 4.4、@Lazy


1、核心注解:Bean、配置和自动扫描

1.1、@Configuration

模块:spring-context 模块。

作用:标记一个类为配置类,类似于传统 XML 配置中的 <beans> 标签,表示该类中定义的 Bean 都会被 Spring 容器管理。

使用方式:通常与 @Bean 注解一起使用,在配置类中定义 Bean。

使用示例:

java">@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}
1.2、@Bean

模块:spring-context 模块。

作用:标记方法为 Bean 定义,用于将方法返回的对象注册到 Spring 容器中,通常配合 @Configuration 使用。

使用方式:在 @Configuration 注解标注的类中,使用 @Bean 注解将方法返回值作为 Bean 注册到容器。

2.3、@Component

模块:spring-context 模块。

作用:标记类为 Spring 的组件(Bean),Spring 会自动扫描并将其注册到容器中。@Component 是一个通用的注解,可以通过 @ComponentScan 来扫描指定包中的类。

使用示例:

java">package com.lizhengi.service@Component
public class MyService {// Service logic
}

常见衍生注解:

  • @Service:通常用于服务层的 Bean。
  • @Repository:通常用于数据访问层的 Bean,包含数据访问相关的异常转换功能。
  • @Controller:通常用于标注 Spring MVC 中的控制器。
2.4、@ComponentScan

模块:spring-context 模块。

作用:用于自动扫描指定包中的 @Component 注解类,自动将它们注册到 Spring 容器中。通常配合 @Configuration 使用。

使用方式:指定要扫描的包或包的路径,自动注册标记为 @Component@Service@Repository@Controller 等注解的类。

使用示例:

java">@Configuration
@ComponentScan(basePackages = "com.lizhengi")
public class AppConfig {// 自动扫描指定包中的 Bean
}

2、依赖注入相关的注解

2.1、@Autowired

模块:spring-bean 模块。

作用:自动装配 Bean,Spring 会自动根据类型注入依赖的 Bean。如果有多个符合条件的 Bean,可以使用 @Qualifier 注解进一步指定注入的具体 Bean。

使用方式:可以标注在构造函数、字段或 setter 方法上。

使用示例:

java">@Component
public class MyService {@Autowiredprivate MyRepository myRepository;  // 自动注入
}
2.2、@Qualifier

模块:spring-bean 模块。

作用:与 @Autowired 配合使用,用于指定注入哪个 Bean。当容器中有多个相同类型的 Bean 时,使用 @Qualifier 注解可以明确指定要注入的 Bean 名称。

使用方式:通常在字段或构造方法中与 @Autowired 配合使用。

使用示例:

java">@Autowired
@Qualifier("myRepositoryImpl")
private MyRepository myRepository;
2.3、@Primary

模块:spring-context 模块。

作用:在存在多个符合条件的 Bean 时,标记该 Bean 为首选 Bean,Spring 会优先注入 @Primary 标记的 Bean。

使用方式:通常配合 @Autowired 使用。

使用示例:

java">@Component
@Primary
public class PrimaryService implements MyService {// 该 Bean 会优先被注入
}
2.4、@Value

模块:spring-bean 模块。

作用:用于注入外部化配置的值,例如属性文件中的值、SpEL 表达式等。

使用方式:可以注入简单类型、数组、List 或其他自定义配置。

使用示例:

java">@Component
public class MyService {@Value("${app.name}")private String appName;  // 注入配置文件中的值
}

3、生命周期相关

3.1、@PostConstruct

模块:Java EE 标准的一部分,位于 javax.annotation 包中。spring-context 模块提供支持。

作用:标记的方法会在 Bean 初始化后执行,通常用于执行一些初始化任务。

使用方式:可以在任何一个 @Component@Bean 注解的方法上使用。

使用示例:

java">@Component
public class MyService {@PostConstructpublic void init() {// 初始化逻辑}
}
3.2、@PreDestroy

模块:Java EE 标准的一部分,位于 javax.annotation 包中。spring-context 模块提供支持。

作用:标记的方法会在 Bean 销毁前执行,通常用于执行清理任务。

使用方式:用于标注一个销毁方法,在容器销毁之前调用。

使用示例:

java">@Component
public class MyService {@PreDestroypublic void cleanup() {// 清理资源}
}

4、其他常用注解

4.1、@Transactional

模块:spring-transaction 模块。

作用:标记方法或类需要进行事务管理,Spring 会为其自动创建事务,确保数据库操作的一致性。

使用方式:可以标注在类或方法上,定义事务的传播行为、隔离级别等。

使用示例:

java">@Service
@Transactional
public class MyService {public void someBusinessMethod() {// 业务逻辑,自动参与事务管理}
}
4.2、@Scope

模块:spring-context 模块。

作用:用于定义 Bean 的作用域,Spring 默认的作用域是单例(singleton),但也可以设置为其他作用域,如 prototype(原型),requestsession 等。

使用方式:可以标注在 @Component@Service@Controller 等注解的类上。

使用示例:

java">@Component
@Scope("prototype")
public class MyService {// 每次请求都返回一个新的实例
}
4.3、@Import

模块:spring-context 模块。

作用:用于引入其他配置类。通过 @Import 注解,可以将其他的 Java 配置类导入到当前配置类中,帮助实现模块化配置。

使用方式:可以通过 @Import 导入一个或多个配置类。

使用示例:

java">@Configuration
@Import({OtherConfig.class, AnotherConfig.class})
public class AppConfig {// 自动加载其他配置类中的 Bean
}
4.4、@Lazy

模块:spring-context 模块。

作用:标注 Bean 为延迟加载,只有在第一次使用时才会创建实例。

使用方式:可以标注在类或方法上。

使用示例:

java">@Component
@Lazy
public class MyService {// 只有在第一次使用时才会被初始化
}

http://www.ppmy.cn/devtools/151180.html

相关文章

ros2-6.4.4 两轮差速控制机器人的问题

遇到一个问题。本节开始尝试在gazebo中仿真上一节构建的模型。 先贴一下现象&#xff0c;启动launch之后&#xff0c;gazebo显示正常移动。但是在rviz中查看就是有问题的&#xff1a; fixedframe:选择odom.显示添加机器人&#xff0c;按topic 选择。提示&#xff1a; no tra…

CNCF云原生计算基金会

CNCF&#xff0c;全称为云原生计算基金会&#xff08;Cloud Native Computing Foundation&#xff09;&#xff0c;成立于2015年&#xff0c;是一个隶属于Linux基金会的非营利组织。CNCF旨在促进和支持开源技术的发展&#xff0c;特别是那些支持云原生&#xff08;cloud native…

高斯数据库 Shell 脚本:批量执行 SQL 文件

高斯数据库 Shell 脚本&#xff1a;批量执行 SQL 文件 优化后的高斯数据库 Shell 脚本 #!/bin/bash# 数据库信息文件路径 DB_INFO_FILE"db_info.txt"# 要执行的 SQL 文件 SQL_FILE"create_table.sql"# 检查数据库信息文件是否存在 if [[ ! -f "$DB_…

ubuntu Android : adb logcat 过滤多个log

指定字符串的log&#xff0c;可以用下面的形式&#xff0c;注意加-E和单引号&#xff1a; adb shell " logcat | grep -E strings1|strings2 " 参考&#xff1a;Android : adb logcat 过滤多个log 用adb shell “ logcat | grep -E ‘strings1| strings2 ‘ “ 形…

【React】新建React项目

目录 create-react-app基础运用React核心依赖React 核心思想&#xff1a;数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架&#xff1a; create-react-app &#xff0c;目前使用它安装默认是19版本&#xff0c;我们这里降为18…

Redis雪崩以及解决方法

概述&#xff1a; Redis中大量缓存数据在同一时间过期&#xff08;失效&#xff09;或者Redis故障宕机时&#xff0c;如果此时有大量的用户请求&#xff0c;都无法在Redis中处理&#xff0c;于是全部请求都直接访问数据库&#xff0c;从而导致数据库的压力骤增&#xff0c;严重…

构建高效的进程池:深入解析C++实现

构建高效的进程池&#xff1a;深入解析C实现 在高性能计算和服务器应用中&#xff0c;进程池&#xff08;Process Pool&#xff09;是一种重要的设计模式。它通过预先创建和维护一定数量的子进程来处理大量的任务请求&#xff0c;从而避免频繁地创建和销毁进程带来的开销。本文…

Ubuntu无法进入图像化界面

目录 1.情况介绍 2.安装ubuntu-session 3.重装显卡驱动 4.后记 1.情况介绍 使用timeshift创建系统快照的时候中途暂停&#xff0c;然后重启系统&#xff0c;系统无法进入图形化界面&#xff0c;出错的现象如下。 2.安装ubuntu-session 键盘操作&#xff1a;CtrlAltF2&#…