Java学习手册:Spring 中常用的注解

一、组件注解

  • @Component :用于标记一个类为 Spring 管理的 Bean,是 Spring 的基本组件注解。Spring 会通过类路径扫描自动检测并注册标记了 @Component 的类为 Bean。
  • @Service :是 @Component 的派生注解,用于标记服务层类,表示该类是一个业务逻辑组件。
  • @Repository :是 @Component 的派生注解,用于标记数据访问层类,表示该类是一个数据访问组件,通常用于 DAO(Data Access Object)类。
  • @Controller :是 @Component 的派生注解,用于标记控制层类,表示该类是一个 Web 控制器组件,通常用于 Spring MVC 中的控制器类。

二、依赖注入注解

  • @Autowired :用于自动注入依赖。Spring 会自动查找匹配的 Bean 并注入到指定的字段、构造方法或 setter 方法中。如果存在多个同类型的 Bean,可以通过 @Qualifier 来指定注入的具体 Bean。
  • @Qualifier :用于指定注入的具体 Bean,当存在多个同类型的 Bean 时,可以通过 @Qualifier 来指定注入哪一个 Bean。它通常与 @Autowired 一起使用。
  • @Resource :也是用于依赖注入的注解,它与 @Autowired 类似,但 @Resource 默认按照名称进行注入,如果找不到匹配的 Bean,则按照类型进行注入。

三、配置注解

  • @Configuration :用于标记一个配置类,表示该类是一个 Spring 配置类,可以替代传统的 XML 配置文件。
  • @Bean :用于在配置类的方法上定义 Bean。被 @Bean 注解的方法会返回一个 Bean 实例,Spring 会自动注册该 Bean 到 IoC 容器中。
  • @Import :用于导入其他配置类,可以将其他配置类中的 Bean 定义引入到当前配置类中。
  • @PropertySource :用于指定属性文件的位置,可以加载.properties 文件中的配置属性到 Spring 的环境变量中。
  • @Value :用于注入配置文件中的属性值到字段中。可以通过 @Value 注解将配置文件中的属性值绑定到 Bean 的字段上。

四、AOP 注解

  • @Aspect :用于标记一个切面类,表示该类是一个 AOP 切面,包含通知和切入点的定义。
  • @Pointcut :用于定义切入点表达式,指定哪些连接点匹配该切入点。
  • @Before :用于定义前置通知,表示在连接点之前执行的通知方法。
  • @AfterReturning :用于定义后置通知,表示在连接点正常返回后执行的通知方法。
  • @AfterThrowing :用于定义异常通知,表示在连接点抛出异常后执行的通知方法。
  • @After :用于定义最终通知,表示在连接点执行完成后(无论是否抛出异常)执行的通知方法。
  • @Around :用于定义环绕通知,表示在连接点之前和之后都执行的通知方法,可以手动控制连接点的执行。

五、MVC 注解

  • @Controller :用于标记控制层类,表示该类是一个 Web 控制器组件,用于处理 HTTP 请求。
  • @RequestMapping :用于映射 HTTP 请求到处理方法上。可以通过 URL 模式、HTTP 方法等方式来指定请求的映射规则。
  • @GetMapping :是 @RequestMapping 的派生注解,专门用于映射 HTTP GET 请求。
  • @PostMapping :是 @RequestMapping 的派生注解,专门用于映射 HTTP POST 请求。
  • @PutMapping :是 @RequestMapping 的派生注解,专门用于映射 HTTP PUT 请求。
  • @DeleteMapping :是 @RequestMapping 的派生注解,专门用于映射 HTTP DELETE 请求。
  • @RequestParam :用于绑定 HTTP 请求参数到方法参数上。可以指定参数是否必填、默认值等。
  • @RequestBody :用于将 HTTP 请求体绑定到方法参数上,通常用于处理 JSON 或 XML 格式的请求数据。
  • @ResponseBody :用于将方法的返回值作为 HTTP 响应体返回给客户端,通常用于返回 JSON 或 XML 格式的数据。
  • @RestController :是 @Controller@ResponseBody 的组合注解,用于标记 RESTful 风格的控制器类,表示该类中的所有方法的返回值都会作为 HTTP 响应体返回给客户端。

六、事务注解

  • @Transactional :用于声明式事务管理,可以标注在类或方法上。标注了 @Transactional 的方法会在执行时自动开启事务,并在方法执行完成后根据执行结果提交或回滚事务。

七、示例代码

以下是一些常用注解的示例代码:

  • 组件注解示例
java 复制代码
@Component
public class Car {
    // 类内容
}

@Service
public class UserService {
    // 类内容
}

@Repository
public class UserRepository {
    // 类内容
}

@Controller
public class UserController {
    // 类内容
}
  • 依赖注入注解示例
java 复制代码
@Service
public class UserService {
    @Autowired
    @Qualifier("userRepository")
    private UserRepository userRepository;
}

@Repository
public class UserRepository {
    // 类内容
}
  • AOP 注解示例
java 复制代码
@Aspect
@Component
public class LogAspect {
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void servicePointcut() {}

    @Before("servicePointcut()")
    public void beforeLog(JoinPoint joinPoint) {
        System.out.println("方法执行前:" + joinPoint.getSignature().getName());
    }
}
  • MVC 注解示例
java 复制代码
@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
}
  • 事务注解示例
java 复制代码
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void transferMoney(Account fromAccount, Account toAccount, Double amount) {
        userRepository.decreaseBalance(fromAccount, amount);
        userRepository.increaseBalance(toAccount, amount);
    }
}

八、总结

Spring 提供了大量的注解来简化开发和配置工作。通过使用这些注解,开发者可以更加方便地定义 Bean、管理依赖关系、配置 AOP、开发 Web 应用以及进行事务管理等。掌握这些常用注解的使用方法,可以提高开发效率,使代码更加简洁和直观。在实际开发中,合理运用 Spring 的注解功能,可以构建出更加高效、可维护的 Spring 应用。

相关推荐
_Jyuan_16 分钟前
Android Studio-相对布局(私人笔记)
android·java·ide·经验分享·笔记·android studio
wuyunhang1234561 小时前
Spring AOP概念及其实现
java·后端·spring
不思念一个荒废的名字1 小时前
【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven
java·前端·maven
福理原乡大王1 小时前
进程地址空间
java·开发语言·算法
南客先生2 小时前
音视频项目在微服务领域的趋势场景题深度解析
java·微服务·面试·性能优化·音视频·高并发
xcLeigh2 小时前
HTML5好看的水果蔬菜在线商城网站源码系列模板8
java·前端·html5
Alsn863 小时前
11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档
java·spring boot·后端
liyongjun63163 小时前
Java List分页工具
java·后端
猎人everest3 小时前
Spring Boot集成Spring Cloud 2024(不使用Feign)
java·spring boot·spring cloud
茂桑4 小时前
日常开发小Tips:后端返回带颜色的字段给前端
java·状态模式