参考整理自元宝的回答。
一、Bean声明和管理
注解 | 核心作用 | 简要说明 |
---|---|---|
**@Component ** |
通用组件标识 | 最基础的注解,标记一个类为 Spring 组件(Bean),将由 Spring 容器管理其生命周期 |
**@Service ** |
业务逻辑层标识 | 特化于服务层(Service Layer),是 @Component 的一种,用于标识业务逻辑组件 |
**@Repository ** |
数据访问层标识 | 特化于数据访问层(DAO Layer),是 @Component 的一种。它还有一个额外好处,会自动转换特定数据访问异常为 Spring 的统一数据访问异常 |
**@Controller ** / **@RestController ** |
Web 控制层标识 | @Controller 用于标记 Spring MVC 的控制器。@RestController 是 @Controller 和 @ResponseBody 的组合,专为 RESTful Web 服务设计,其所有方法的返回值都会直接写入 HTTP 响应体 |
**@Configuration ** |
声明配置类 | 标记一个类为配置类,该类内部会包含使用 @Bean 注解的方法,用于定义 Bean |
**@Bean ** |
方法级别定义Bean | 在配置类的方法上使用,方法的返回值将被注册为 Spring 容器中的一个 Bean |
**@Scope ** |
定义Bean的作用域 | 指定 Bean 的作用域,例如单例(singleton )、原型(prototype ,每次注入新实例)、请求(request )、会话(session )等 |
**@Lazy ** |
延迟初始化 | 标记 Bean 是否应该延迟初始化。设置为 true 时,Bean 会在第一次被使用时才创建,而不是在容器启动时 |
**@Primary ** |
首选Bean | 当存在多个相同类型的 Bean 候选时,被此注解标记的 Bean 将作为自动注入时的首选 |
@PostConstruct | 初始化函数 | 自定义初始化函数 |
@PreDestroy | 销毁函数 | 自定义销毁函数 |
二、依赖注入
注解 | 核心作用 | 简要说明 |
---|---|---|
**@Autowired ** |
按类型自动装配 | Spring 提供的注解,用于自动按照类型(byType)注入依赖。可以用在字段、setter 方法或构造函数上 |
**@Qualifier ** |
按名称细化装配 | 当有多个同一类型的 Bean 时,配合 @Autowired 使用,通过指定 Bean 的名称(byName)来消除歧义 |
**@Resource ** |
按名称装配 (JSR-250) | Java 标准注解(JSR-250),默认按名称(byName)进行装配。如果找不到匹配的名称,则会回退到按类型装配 |
**@Value ** |
注入简单值/配置 | 用于注入基本数据类型、String、SpEL 表达式结果,或者从配置文件(如 application.properties )中读取属性值 |
三、web
注解 | 核心作用 | 简要说明 |
---|---|---|
**@RequestMapping ** |
映射Web请求 | 用于将 HTTP 请求映射到控制器方法上。可以简化其特定 HTTP 方法的变体,如 @GetMapping , @PostMapping 等 |
**@RequestBody ** |
绑定请求体 | 指示方法参数应该从 HTTP 请求体中绑定,通常用于接收 JSON 或 XML 格式的数据并转换为 Java 对象 |
**@ResponseBody ** |
返回值直接作为响应体 | 标记一个方法,其返回值应直接写入 HTTP 响应体,而不是解析为视图名称 |
**@PathVariable ** |
提取URL路径变量 | 用于从请求 URI 模板中提取变量值,绑定到方法参数上。例如,URI 模板 /users/{id} 中的 {id} |
**@RequestParam ** |
提取请求参数 | 用于从 URL 查询字符串或表单数据中提取请求参数,绑定到方法参数上 |
@RequestHeader | 提取请求头 | 取出请求头中的数据并绑定到参数上 |
**@ControllerAdvice ** / **@RestControllerAdvice ** |
全局控制器增强 | 用于编写跨所有控制器的全局代码,如全局异常处理(@ExceptionHandler )、数据绑定(@InitBinder ) |
四、配置
解 | 核心作用 | 简要说明 |
---|---|---|
**@SpringBootApplication ** |
Spring Boot核心注解 | 这是一个组合注解,包含了 @SpringBootConfiguration (允许在上下文中注册额外的 bean 或导入其他配置类)、@EnableAutoConfiguration (启用自动配置)和 @ComponentScan (组件扫描) |
**@EnableAutoConfiguration ** |
启用自动配置 | Spring Boot 自动配置机制的核心。它会根据项目的类路径、已存在的 Bean 定义和各种属性设置,尝试自动配置你的应用程序 |
**@Conditional 系列** |
条件化配置Bean | 这是一族注解(如 @ConditionalOnClass , @ConditionalOnProperty 等),它们根据特定条件(如某个类是否存在、某个属性是否被设置)来决定是否注册 Bean |
**@ConfigurationProperties ** |
批量绑定配置属性 | 将配置文件(如 application.properties )中的属性批量绑定到一个带有前缀的 Java Bean 上,实现类型安全的配置 |
**@Profile ** |
环境特定配置 | 指定某个 Bean 或配置类仅在特定的环境(Profile,如 "dev", "prod")被激活时才会被注册到容器中 |
**@PropertySource ** |
加载属性文件 | 指定要加载的外部属性文件(.properties ),将其中的属性添加到 Spring 的 Environment 中 |
@Import |
导入类 | 将外部类导入到IOC容器中 |
@ImportResource | 导入配置文件 | 将xml文件中的配置导入到配置环境中 |
五、AOP、事务与异步
注解 | 核心作用 | 简要说明 |
---|---|---|
**@Transactional ** |
声明式事务管理 | 声明一个方法或类需要事务管理。可以配置事务的传播行为、隔离级别、回滚规则等属性 |
**@Aspect ** |
声明切面 | 标记一个类为切面,该类包含了通知(Advice)和切点(Pointcut)的定义 |
**@Before / @After / @Around 等** |
声明通知 | 在切面中定义通知类型,例如 @Before 在目标方法执行前执行,@Around 环绕目标方法执行 |
**@EnableAsync ** |
启用异步执行 | 在配置类上使用,开启对异步任务的支持 |
**@Async ** |
标记异步方法 | 标记一个方法为异步执行,该方法将在调用时在一个独立的线程中运行 |