注解
约 838 字大约 3 分钟
2025-07-24
Spring 中你常用的注解有哪些?它们的含义和作用是什么?
在 Spring 及 Spring Boot 项目开发中,我频繁使用以下几类注解来简化配置、管理 Bean 和处理 Web 请求。
1. Bean 定义与装配注解
@Component
: 将一个普通的 Java 类标识为 Spring 组件,使其能够被组件扫描 (@ComponentScan
) 发现并注册为 Bean。它是所有组件注解的基础。@Service
: 用于标注业务逻辑层的组件 (Service)。@Repository
: 用于标注数据访问层的组件 (DAO),并能将特定的数据库异常转译为 Spring 的统一数据访问异常。@Controller
: 用于标注 Web 控制器层的组件,通常与@RequestMapping
配合使用。@Configuration
: 用于标注配置类,替代传统的 XML 配置文件。类中的@Bean
方法会被 Spring 容器处理,用于定义 Bean。
@Bean
: 用在@Configuration
注解的类的方法上,用于声明一个 Bean。Spring 容器会管理这个方法返回的对象的生命周期。@Autowired
: Spring 提供的自动装配注解。它会按类型 (byType
) 在容器中查找匹配的 Bean,并将其注入到标记的字段、构造器或方法中。@Qualifier("beanName")
: 当有多个相同类型的 Bean 时,@Autowired
会无法抉择。此时需要配合@Qualifier
指定要注入的 Bean 的名称。@Resource(name = "beanName")
: JSR-250 规范的注解,功能与@Autowired
类似。它默认按名称 (byName
) 进行装配,如果找不到匹配名称的 Bean,则会回退到按类型装配。@Scope("prototype")
: 定义 Bean 的作用域。默认为singleton
(单例),prototype
表示每次请求都会创建一个新的 Bean 实例。其他作用域还包括request
、session
等。
2. Spring Boot 核心注解
@SpringBootApplication
: 一个复合注解,是 Spring Boot 项目的启动类注解。它包含了:@SpringBootConfiguration
: 继承自@Configuration
,表示这是一个 Spring Boot 配置类。@EnableAutoConfiguration
: 启用 Spring Boot 的自动配置机制,根据类路径下的jar
包依赖自动配置项目。@ComponentScan
: 自动扫描并加载当前包及其子包下的组件。
@EnableAutoConfiguration
: 如上所述,是自动配置的核心,它会触发 Spring Boot 对应用程序所需配置的自动推断和应用。
3. Web 开发相关注解
@RestController
: 一个复合注解,相当于@Controller
和@ResponseBody
的组合。它表示该控制器下的所有方法都默认返回 JSON 或 XML 格式的数据,而不是视图。@RequestMapping("/path")
: 将 HTTP 请求映射到控制器的处理方法上。可以指定请求的 URL 路径、HTTP 方法 (GET, POST 等)。@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
: 更具体的请求映射注解,分别对应 GET, POST, PUT, DELETE 请求。
@RequestParam
: 将请求参数绑定到方法的参数上。@PathVariable
: 将 URL 模板中的变量 (如/users/{id}
) 绑定到方法的参数上。@RequestBody
: 将 HTTP 请求的 body 内容 (通常是 JSON) 绑定到一个 Java 对象上。
4. AOP 与事务注解
@Aspect
: 将一个类声明为切面。@Pointcut
: 定义切点,即指定切面逻辑在哪些连接点(方法)上执行。@Before
,@After
,@Around
: 定义通知 (Advice) 类型,指定切面逻辑的执行时机。@Transactional
: 声明式事务注解。可以应用在类或方法上,当方法执行时,Spring 会自动开启、提交或回滚事务。