spring 核心注解整理

news/2025/4/1 5:24:44/

总结一下,核心注解涵盖以下方面:

  1. 依赖注入相关注解
  2. Bean定义和组件扫描注解
  3. 配置类相关注解
  4. 条件化配置注解
  5. 作用域和生命周期注解
  6. AOP相关注解
  7. 事务管理注解
  8. 属性注入相关注解
  9. 测试相关注解
  10. Spring Boot核心注解(如果需要)

每个部分列出注解名称,简要说明作用,并给出代码示例。这样用户能够全面了解Spring的核心注解,并在实际开发中正确应用。

以下是 Spring 框架中 核心注解 的分类整理,涵盖依赖注入、配置管理、Bean 声明等核心功能:


一、依赖注入(Dependency Injection)

注解作用示例
@Autowired自动注入 Bean,默认按类型匹配。可标注在字段、构造函数或方法上。@Autowired private UserService userService;
@Qualifier按名称指定注入的 Bean,用于解决多个同类型 Bean 的冲突。@Autowired @Qualifier("userServiceImplA") UserService userService;
@ResourceJSR-250 标准注解,按名称注入(类似 @Autowired + @Qualifier)。@Resource(name = "userDao") private UserDao userDao;
@Value注入配置文件属性或 SpEL 表达式结果。@Value("${app.name}") private String appName;

二、Bean 声明与组件扫描

注解作用示例
@Component通用注解,标记类为 Spring Bean(需被组件扫描)。@Component public class UserService { ... }
@Service标注服务层组件(功能同 @Component,语义更明确)。@Service public class UserServiceImpl implements UserService {}
@Repository标注数据访问层组件(DAO 层),自动处理数据库异常。@Repository public class UserDaoImpl implements UserDao {}
@Controller标注控制器层组件(Spring MVC)。@Controller public class UserController { ... }
@Configuration标记类为配置类,定义 Bean。@Configuration public class AppConfig { ... }
@Bean在配置类中定义 Bean,方法名默认作为 Bean 名称。@Bean public DataSource dataSource() { return new HikariDataSource(); }

三、配置与条件化

注解作用示例
@Conditional根据条件决定是否注册 Bean(需实现 Condition 接口)。@Conditional(OnProductionEnvCondition.class)
@Profile根据环境配置激活 Bean(如 dev, prod)。@Profile("dev") public class DevConfig { ... }
@ConditionalOnClassSpring Boot 条件注解,类路径存在指定类时生效。@ConditionalOnClass(RedisTemplate.class)
@ConditionalOnMissingBean容器中不存在指定 Bean 时生效。@Bean @ConditionalOnMissingBean public CacheManager cacheManager() { ... }

四、作用域与生命周期

注解作用示例
@Scope定义 Bean 的作用域(如 singleton, prototype)。@Scope("prototype") public class TaskProcessor { ... }
@PostConstructJSR-250 注解,Bean 初始化后执行的方法。@PostConstruct public void init() { ... }
@PreDestroyJSR-250 注解,Bean 销毁前执行的方法。@PreDestroy public void cleanup() { ... }
@Lazy延迟初始化 Bean(首次使用时创建)。@Lazy @Service public class HeavyService { ... }

五、AOP 与事务

注解作用示例
@Aspect定义切面类,结合 @Pointcut 和通知注解(@Before, @After 等)。@Aspect @Component public class LoggingAspect { ... }
@Transactional声明式事务管理,标注在类或方法上。@Transactional(rollbackFor = Exception.class)

六、Web 相关(Spring MVC)

注解作用示例
@RequestMapping映射 HTTP 请求到控制器方法(支持 REST 方法简写如 @GetMapping)。@GetMapping("/users") public List<User> getUsers() { ... }
@RequestBody将请求体内容(如 JSON)绑定到方法参数。@PostMapping("/users") public void createUser(@RequestBody User user) { ... }
@ResponseBody将方法返回值直接写入响应体(如返回 JSON)。@ResponseBody @GetMapping("/info") public User getUser() { ... }
@RestController组合 @Controller + @ResponseBody,用于 REST API。@RestController public class UserApiController { ... }

七、测试相关

注解作用示例
@SpringBootTestSpring Boot 测试类,加载完整应用上下文。@SpringBootTest class UserServiceTest { ... }
@MockBean在测试中注入 Mock Bean。@MockBean private UserRepository userRepository;
@TestJUnit 测试方法。@Test void testCreateUser() { ... }

八、Spring Boot 核心注解

注解作用示例
@SpringBootApplication组合 @Configuration + @EnableAutoConfiguration + @ComponentScan,标记主启动类。@SpringBootApplication public class MyApp { ... }
@EnableAutoConfiguration启用 Spring Boot 自动配置。@EnableAutoConfiguration

总结

掌握这些核心注解是使用 Spring 框架的基础,合理运用它们可以极大简化开发:

  1. 依赖注入@Autowired, @Resource, @Value
  2. Bean 声明@Component, @Service, @Bean
  3. 配置管理@Configuration, @Profile, @Conditional
  4. Web 开发@RestController, @RequestMapping
  5. 事务与AOP@Transactional, @Aspect

结合具体场景灵活使用,能显著提升代码的可维护性和扩展性。


http://www.ppmy.cn/news/1582895.html

相关文章

深度拆解:AI Agent发展演练·数字挑战

前引&#xff1a;“Agent”从英语翻译过来就是代理、中介的意思&#xff0c;它描述了一种拥有欲望、信念、意图以及采取行动能力的载体。在计算机科学与人工智能领域中&#xff0c;“Agent”又是如何的呢&#xff1f;下面跟着我一起来看看吧&#xff01; 目录 AI Agent的发展…

修形还是需要再研究一下

最近有不少小伙伴问到修形和蜗杆砂轮的问题&#xff0c;之前虽然研究过一段时间&#xff0c;但是由于时间问题放下了&#xff0c;最近想再捡起来。 之前计算的砂轮齿形是一整段的&#xff0c;但是似乎这种对于有些小伙伴来说不太容易接受&#xff0c;希望按照修形的区域进行分…

软考笔记——操作系统

第四章节——操作系统 计算机系统知识 第四章节——操作系统一、操作系统概述1. OS作用2. OS特征3.OS分类 二、进程管理1. 进程状态2. 通信3. 死锁 三、存储管理1. 存储结构2. 存储管理方案2.1 分区存储管理2.2 分页存储管理2.3 分段存储管理2.4 段页式存储管理2.5 虚拟存储管理…

软考系统架构师论文模版及实例

记住总体原则: 摘要——300字 项目背景与职责——300字左右 选取的架构特点——200字左右 架构在项目中的具体应用过程——1500字左右&#xff08;从每种架构中至少总结三个方面进行描述&#xff0c;例如三个特点在项目中的体现&#xff0c;三个步骤在项目中的应用等&#xff0…

C++11 标准库 `find` 与 `find_if` 详解

一、std::find 函数 功能&#xff1a;在指定范围内查找特定值&#xff0c;返回第一个匹配元素的迭代器&#xff1b;若未找到&#xff0c;返回 end() 迭代器。 原型&#xff1a; template <class InputIt, class T> InputIt find(InputIt first, InputIt last, const T&…

windows远程连接ubantu

目录 前言&#xff1a; 1.在ubantu端 &#xff08;1&#xff09;确保 Ubuntu 系统开启 SSH 服务 &#xff08;2&#xff09;获取ubantu系统的ip地址 2. 在windows端 &#xff08;1&#xff09;在vscode中安装Remote - SSH扩展 &#xff08;2&#xff09;下面是vscode的一…

【STM32实物】基于STM32的太阳能充电宝设计

基于STM32的太阳能充电宝设计 演示视频: 基于STM32的太阳能充电宝设计 硬件组成: 系统硬件包括主控 STM32F103C8T6、0.96 OLED 显示屏、蜂鸣器、电源自锁开关、温度传感器 DS18B20、继电器、5 V DC 升压模块 、TB4056、18650锂电池、9 V太阳能板、稳压降压 5 V三极管。 功能…

C++红黑树的深入解析:从理论到实践

红黑树作为一种自平衡的二叉搜索树&#xff0c;是计算机科学中的经典数据结构之一&#xff0c;广泛应用于各种需要高效查找、插入和删除操作的场景中&#xff0c;比如STL中的 map 和 set。虽然它的基本原理并不复杂&#xff0c;但在实现过程中&#xff0c;需要处理许多细节&…