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

Spring 中的常用注解

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。

使用示例:

@Configuration
public class AppConfig {
    @Bean
    public 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 来扫描指定包中的类。

使用示例:

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 等注解的类。

使用示例:

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

2、依赖注入相关的注解

2.1、@Autowired

模块:spring-bean 模块。

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

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

使用示例:

@Component
public class MyService {
    @Autowired
    private MyRepository myRepository;  // 自动注入
}
2.2、@Qualifier

模块:spring-bean 模块。

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

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

使用示例:

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

模块:spring-context 模块。

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

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

使用示例:

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

模块:spring-bean 模块。

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

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

使用示例:

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

3、生命周期相关

3.1、@PostConstruct

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

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

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

使用示例:

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

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

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

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

使用示例:

@Component
public class MyService {
    @PreDestroy
    public void cleanup() {
        // 清理资源
    }
}

4、其他常用注解

4.1、@Transactional

模块:spring-transaction 模块。

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

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

使用示例:

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

模块:spring-context 模块。

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

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

使用示例:

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

模块:spring-context 模块。

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

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

使用示例:

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

模块:spring-context 模块。

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

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

使用示例:

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

http://www.kler.cn/a/499973.html

相关文章:

  • Vue3初学之组件通信
  • 快速实现一个快递物流管理系统:实时更新与状态追踪
  • 【算法与数据结构】—— 回文问题
  • AR 眼镜之-拍照/录像动效切换-实现方案
  • Java手动打印执行过的sql
  • 深度学习-81-大语言模型LLM之基于litellm与langchain与ollama启动的模型交互
  • 解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题
  • 复古黑白恐怖迷幻眼睛纹身刺青插画潮流艺术png免抠拼贴图片素材Mindrift. Psychedelic Illustrations
  • Springboot——钉钉(站内)实现登录第三方应用
  • C++实现设计模式---访问者模式 (Visitor)
  • 解决 VSCode 调试时 Python 文件出现相对路径报错问题‘FileNotFoundError’
  • Swift 趣味开发:查找拼音首字母全部相同的 4 字成语(上)
  • 智慧充电桩可视化管理提升能源效率
  • xml简介
  • Docker中安装Tailscale方法一
  • OceanBase数据库设计与管理:构建高效分布式数据架构基石
  • Stable diffusion的SDXL模型,针不错!(含实操)
  • git push报错 unauthorized email account cannot submit code
  • 老榕树的java专题:探索 Nacos:微服务架构中的配置与服务发现利器
  • 【ArcGIS微课1000例】0138:ArcGIS栅格数据每个像元值转为Excel文本进行统计分析、做图表
  • C语言基本知识复习浓缩版:控制语句--循环
  • 汽车免拆诊断 | 2017 款东风风神 AX7 车热机后怠速不稳
  • 基于单片机的智能家居排气扇系统设计