Spring 中的常用注解

ops/2025/1/14 0:38:07/

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/ops/149866.html

相关文章

车载音频开发(二):对音频数据作音量调节

通过前一个章节打下的基础车载音频开发&#xff08;一&#xff09;&#xff1a;从看懂wav开始https://blog.csdn.net/Hellomino_/article/details/140873133?fromshareblogdetail&sharetypeblogdetail&sharerId140873133&sharereferPC&sharesourceHellomino_&…

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…

实战篇: BiLSTM+CRF实现中文分词

中文分词是自然语言处理&#xff08;NLP&#xff09;领域中的基础任务之一&#xff0c;它将一段连续的中文字符切分为词汇单元&#xff0c;为后续的情感分析、机器翻译等任务提供输入。在传统方法中&#xff0c;基于规则的分词方法受限于语言多样性&#xff0c;而统计方法中的隐…

【Vue】MacOS从0开始创建一个前端Vue项目并集成AntDesignVue

文章目录 环境安装创建vue项目vue项目结构解读集成AntDesignVue 环境安装 nodejs环境下载&#xff1a;https://nodejs.org/zh-cn&#xff0c;从官网下载后直接安装即可&#xff0c;通过下面命令判断是否安装成功&#xff1a; node -v npm -v如果有返回版本号就安装成功了。 …

2024 高级爬虫笔记(六)scrapy框架基础知识

目录 一、Scrapy框架基础知识1.1、什么是scrapy&#xff1f;1.2、scrapy的工作流程1.3、scrapy中每个模块的作用&#xff1a;1.4、scrapy的入门使用1.4.1 安装scrapy1.4.2、scrapy项目实现流程1.4.3、创建scrapy项目1.4.4、创建爬虫1.4.5、完善spider1.4.6、配置settings文件1.…

【Rust】结构体定义域实例化

目录 思维导图 1. 结构体的定义与实例化 1.1 结构体的基本概念 1.2 定义结构体 1.3 创建结构体实例 1.4 结构体的定义与实例化示例 2. 访问与修改结构体字段 2.1 访问字段 2.2 修改字段 3. 结构体实例的构造函数 3.1 构造函数的定义 3.2 使用字段初始化简写 4. 结…

RIP协议在简单网络架构的使用

目录 基本概念路由更新机制特点与局限性场景模拟 注意&#xff1a;本文的配置为上文《复杂园区网基本分支的构建》拓展&#xff0c;主要记录rip协议在简单网络架构的使用。 RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;是一种基于距离向…

如何实现多级缓存?

本文重点说一说在Java应用中&#xff0c;多级缓存如何实现。 多级缓存是比较常见的一种性能优化的手段&#xff0c;一般来说就是本地缓存分布式缓存。 本地缓存一般采用Caffeine和Guava&#xff0c;这两种是性能比较高的本地缓存的框架。他们都提供了缓存的过期、管理等功能。…