注解(了解)

在 Spring 框架中,注解(Annotation)是核心组成部分,它使得开发人员可以使用注解来简化配置和定义 bean。Spring 通过注解来实现控制反转(IoC,Inversion of Control)和面向切面编程(AOP,Aspect-Oriented Programming),大大简化了开发流程。

下面是一些常见的 Spring 注解及其详细解释:

1. 核心注解

  • @Component: 表示一个通用组件。任何 Spring 管理的类都可以用此注解标记。它的主要功能是将该类注册为一个 Spring Bean。
  • @Repository: 表示一个数据访问层组件。它是 @Component 的一种特化,用来表示持久层(DAO 层)的类。该注解还提供了持久化异常的转换功能,将数据库的异常转换为 Spring 统一的数据访问异常。
  • @Service: 表示一个服务层组件。它是 @Component 的一种特化,主要用于表示业务逻辑层的类。
  • @Controller: 表示一个控制层组件。它是 @Component 的一种特化,用于表示控制层(通常是处理 HTTP 请求的类)。主要用于 MVC 模式中的控制器。

2. Spring MVC 相关注解

  • @RestController: 该注解是 @Controller@ResponseBody 的结合,表示该类是一个控制器,并且默认将每个方法的返回值都作为 HTTP 响应的内容,而不是视图名。

    @RequestMapping("/api")  // 在类上
    
    public class MyController {
    
      @RequestMapping("/hello")  // 在方法上
    
      public String sayHello() {
    
        return "Hello";
    
      }
    
    }
    
  • @GetMapping@PostMapping@PutMapping@DeleteMapping: 分别对应 HTTP 的 GET、POST、PUT、DELETE 方法的快捷注解。是 @RequestMapping(method = RequestMethod.GET) 这样的缩写。

  • @RequestParam: 用于绑定请求参数到方法的参数上。通常用于获取 URL 中的参数。例如:@RequestParam("id") int id

  • @PathVariable: 用于获取 URL 路径中的参数。例如:@PathVariable("id") int id

  • @RequestBody: 用于将请求体的 JSON 数据转换为 Java 对象。常用于 POST 请求。

  • @ResponseBody: 指定返回的内容是直接写入 HTTP 响应体,而不是返回视图名。用于类或方法上,返回的结果直接作为响应内容。

3. 依赖注入相关注解

  • @Autowired: 自动装配依赖对象,Spring 会根据类型自动注入。可以用于字段、构造器、方法。它通过类型来自动匹配相关的 Bean,如果有多个符合条件的 Bean,可以结合 @Qualifier 注解使用。
  • @Qualifier: 用于更精确地指定注入的 Bean,当有多个同类型的 Bean 时,结合 @Autowired 使用,明确指定要注入的 Bean 名称。
  • @Resource: JSR-250 标准的注解,类似于 @Autowired,但它是根据名称进行注入的,也可以通过 nametype 属性来进一步细化。
  • @Value: 用于注入属性文件中的值或 SpEL 表达式。

4. 作用域相关注解

  • @Scope: 用于定义 Bean 的作用域。常见的作用域有 singleton(单例)和 prototype(多例)。其他作用域还包括 requestsessionapplication,但这些主要用于 Web 应用中。
@Component

@Scope("prototype")

public class MyPrototypeBean {

  // 该类每次都会创建新的实例

}

5. Spring AOP 相关注解

  • @Aspect: 表示这是一个切面类,定义了横切逻辑。
  • @Before: 指定在某个方法之前执行。可以用来记录日志或进行安全检查等操作。
  • @After: 指定在某个方法之后执行。
  • @AfterReturning: 指定在某个方法成功返回之后执行。
  • @AfterThrowing: 指定在某个方法抛出异常后执行。
  • @Around: 用于在方法执行前后进行操作。它可以控制目标方法的执行,并且可以在目标方法的前后都执行一些操作。

6. 事务管理相关注解

  • @Transactional: 用于声明方法或类的事务性,Spring 会根据配置自动进行事务的提交或回滚。可以在类上或方法上使用:

    @Transactional
    
    public void myTransactionalMethod() {
    
      // 该方法会被 Spring 管理事务
    
    }
    

7. 其他常见注解

  • @Configuration: 标识一个配置类,通常用来定义 Spring 的 @Bean。用来替代 XML 配置文件。
  • @Bean: 用于在 @Configuration 类中定义一个 Bean。
  • @PropertySource: 用于指定属性文件的路径,从而可以在 Spring 容器中加载该属性文件的内容。
  • @EnableScheduling: 用于启用 Spring 的调度任务功能。
  • @EnableAsync: 用于启用异步方法执行。

示例代码:

// 这是一个配置类

@Configuration

public class AppConfig {

  @Bean

  public MyService myService() {

    return new MyService();

  }

}

// 这是一个控制器类

@RestController

@RequestMapping("/api")

public class MyController {

  @Autowired

  private MyService myService;

  @GetMapping("/hello")

  public String sayHello(@RequestParam("name") String name) {

    return "Hello " + name;

  }

}

// 这是一个服务类

@Service

public class MyService {

  public String process() {

    return "Processed";

  }

}

总结:

Spring 中的注解为开发人员提供了简洁的开发方式,使得代码更清晰、配置更简化。了解并掌握这些注解的用途和作用,能够让开发者更高效地进行 Spring 项目的开发。如果需要更深入的讲解或有任何具体问题,随时欢迎提问。


项目分区导航前后端分离or不分离? ⬅️ | 03-注解(了解) | ➡️ 创建菜单与游戏界面