JAVA项目中常见的注解总结
以下是 Spring Boot/Spring MVC 项目中按使用频率排序的核心注解总结,包含常用场景和示例,帮助你快速掌握高频开发需求:
一、高频基础注解(框架核心)
1. @SpringBootApplication
(启动类注解)
- 作用:标识 Spring Boot 应用的主类,包含
@Configuration
+@EnableAutoConfiguration
+@ComponentScan
组合功能。 - 场景:项目入口类必加,用于开启自动配置和组件扫描。
java
@SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);} }
2. @Controller
(MVC 控制器)
- 作用:标识一个 MVC 控制器类,处理 Web 请求。
- 场景:处理 HTTP 请求的类(如 REST 接口),常配合
@RequestMapping
使用。java
@Controller @RequestMapping("/user") public class UserController {// ... }
3. @RestController
(REST 控制器)
- 作用:组合
@Controller
+@ResponseBody
,直接返回 JSON / 对象(无需视图解析)。 - 场景:开发 RESTful API 时使用,避免手动添加
@ResponseBody
。java
@RestController @RequestMapping("/api") public class ApiController {@GetMapping("/data")public User getData() { return new User("admin"); } // 直接返回 JSON }
4. @RequestMapping
(请求映射)
- 作用:定义 URL 路径与方法的映射关系,可用于类或方法。
- 场景:细粒度控制请求路径,支持
GET/POST/PUT/DELETE
等方法。java
@GetMapping("/hello") // 等价于 @RequestMapping(method = GET) public String hello() { return "Hello World!"; }
二、依赖注入与配置注解(核心机制)
5. @Autowired
(自动装配)
- 作用:按类型自动注入 Bean,可用于字段、构造器、方法。
- 场景:注入 Service/Repository/ 其他组件。
java
@Service public class UserService {@Autowiredprivate UserRepository repository; // 注入 DAO }
6. @Component
(通用组件)
- 作用:标识一个通用组件(如工具类),被 Spring 容器管理。
- 场景:非 MVC 层的组件(如
@Service
/@Repository
/@Controller
是其衍生注解)。java
@Component public class CacheUtil {// ... }
7. @Service
(服务层组件)
- 作用:标识服务层(Service)组件,用于业务逻辑处理。
- 场景:Service 类上必加,配合
@Autowired
注入。java
@Service public class UserServiceImpl implements UserService {// ... }
8. @Repository
(数据层组件)
- 作用:标识数据访问层(DAO)组件,自动处理异常(如
SQLException
转DataAccessException
)。 - 场景:DAO 类或 MyBatis Mapper 接口上。
java
@Repository public interface UserRepository extends JpaRepository<User, Long> {// ... }
三、请求处理与参数注解(Web 开发核心)
9. @PathVariable
(路径参数)
- 作用:从 URL 路径中获取参数(如
/user/{id}
)。 - 场景:RESTful 风格接口中获取资源 ID。
java
@GetMapping("/user/{id}") public User getUser(@PathVariable Long id) {return repository.findById(id).orElse(null); }
10. @RequestParam
(请求参数)
- 作用:获取请求参数(如
?name=admin
),支持默认值、是否必填等。 - 场景:处理查询参数或表单参数。
java
@GetMapping("/list") public List<User> getUsers(@RequestParam(defaultValue = "0") int page) {// ... }
11. @RequestBody
(请求体参数)
- 作用:读取请求体中的 JSON/XML 数据,反序列化为对象。
- 场景:处理 POST/PUT 请求的请求体(如前端传递的 JSON 对象)。
java
@PostMapping("/create") public User createUser(@RequestBody User user) {return repository.save(user); }
12. @ResponseBody
(响应体)
- 作用:将方法返回值转为 JSON/XML 响应(需配合
@Controller
使用)。 - 场景:与
@Controller
搭配实现 REST 接口(@RestController
已包含此注解)。java
@Controller @RequestMapping("/api") public class ApiController {@GetMapping("/data")@ResponseBody // 返回 JSONpublic User getData() { return new User("admin"); } }
四、配置与属性注入注解(环境配置)
13. @Configuration
(配置类)
- 作用:标识一个配置类,用于替代 XML 配置(如 Bean 定义)。
- 场景:自定义 Bean 的配置类(如数据源、拦截器等)。
java
@Configuration public class AppConfig {@Beanpublic DataSource dataSource() {// 配置数据源} }
14. @Bean
(Bean 定义)
- 作用:在配置类中手动定义 Bean(替代 XML 的
<bean>
标签)。 - 场景:自定义 Bean(如工具类、第三方库组件)。
java
@Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);return template; }
15. @Value
(属性注入)
- 作用:从配置文件(如
application.properties
)中读取属性值。 - 场景:注入自定义配置(如数据库连接参数、第三方服务地址)。
java
@Service public class EmailService {@Value("${email.server.host}")private String host; }
五、AOP 与事务注解(切面编程)
16. @Transactional
(事务管理)
- 作用:声明式事务管理,标注在方法或类上开启事务。
- 场景:服务层方法中需要数据库事务的场景(如新增 / 更新操作)。
java
@Service public class OrderService {@Transactionalpublic void createOrder(Order order) {// 数据库操作自动加入事务} }
17. @Aspect
(切面)
- 作用:标识一个切面类,用于定义切点和通知(Advice)。
- 场景:实现日志记录、权限校验、性能监控等横切逻辑。
java
@Aspect @Component public class LogAspect {@Pointcut("execution(* com.example.service.*.*(..))")public void servicePointcut() {}@Before("servicePointcut()")public void logBefore() {// 方法执行前记录日志} }
六、其他常用注解(扩展功能)
18. @CrossOrigin
(跨域请求)
- 作用:解决跨域问题(CORS),允许特定来源的请求访问接口。
- 场景:前后端分离项目中,前端域名与后端不一致时。
java
@RestController @CrossOrigin(origins = "http://localhost:3000") // 允许前端域名 @RequestMapping("/api") public class ApiController {// ... }
19. @Valid
(参数校验)
- 作用:结合 JSR-303 校验框架,验证请求参数合法性。
- 场景:在
@RequestBody
或表单参数中校验数据(如非空、格式匹配)。java
@PostMapping("/register") public User register(@Valid @RequestBody User user) { // 校验 User 对象字段return userService.save(user); }
20. @RequestMapping
衍生注解(快捷方式)
@GetMapping
:等价于@RequestMapping(method = GET)
@PostMapping
:等价于@RequestMapping(method = POST)
@PutMapping
:等价于@RequestMapping(method = PUT)
@DeleteMapping
:等价于@RequestMapping(method = DELETE)
- 场景:简化 HTTP 方法的映射,代码更易读。
总结:按使用场景分类记忆
场景 | 核心注解 |
---|---|
启动与配置 | @SpringBootApplication 、@Configuration 、@Bean 、@Value |
MVC 控制器 | @Controller 、@RestController 、@RequestMapping 及其衍生注解 |
依赖注入 | @Autowired 、@Component 、@Service 、@Repository |
请求参数处理 | @PathVariable 、@RequestParam 、@RequestBody 、@ResponseBody |
事务与 AOP | @Transactional 、@Aspect 、@Pointcut 、@Before /@After |
跨域与校验 | @CrossOrigin 、@Valid |