Java springboot里注解大全和使用指南

在 Java Spring Boot 中,注解是简化开发、提高效率的关键工具。以下是一些核心注解及其使用指南,按功能分类整理:

一、核心启动与配置注解

  1. @SpringBootApplication

    • 作用 :Spring Boot 应用的核心注解,用于标记主启动类。它是一个组合注解,等价于同时使用 @Configuration@EnableAutoConfiguration@ComponentScan
    • 使用场景:必须添加在 Spring Boot 应用的主启动类上,是应用启动的必要条件。
    • 示例
java 复制代码
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@Configuration

  • 作用:声明当前类是一个配置类,相当于 Spring 的 XML 配置文件。
  • 使用场景 :用于定义和配置 Bean,通常配合 @Bean 注解一起使用。
  • 示例
java 复制代码
@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        // 配置并返回一个数据源 Bean
        return new HikariDataSource();
    }
}
  1. @EnableAutoConfiguration

    • 作用:启用 Spring Boot 的自动配置机制,根据类路径和配置文件中的信息自动配置 Spring 应用。
    • 使用场景 :通常与 @SpringBootApplication 一起使用,无需单独使用。
  2. @ComponentScan

    • 作用 :自动扫描指定包及其子包下的组件(如 @Component@Service@Repository@Controller 等),并将它们注册为 Spring Bean。
    • 使用场景 :通常与 @SpringBootApplication 一起使用,无需单独使用。若需自定义组件扫描范围,可通过 basePackages 属性指定。
    • 示例
java 复制代码
@SpringBootApplication(scanBasePackages = "com.example.demo")
public class DemoApplication {
    // ...
}

二、组件注册注解

  1. @Component

    • 作用:通用的组件注解,用于标记任何类为 Spring 的组件。Spring 会自动扫描并创建该类的实例。
    • 使用场景 :当组件不属于 ControllerServiceRepository 等特定层级时使用。
    • 示例
java 复制代码
@Component
public class ToolUtil {
    public String formatStr(String str) {
        return str.trim().toUpperCase();
    }
}

@Service

  • 作用 :标记业务逻辑层(Service 层)的组件,是 @Component 的特化版本,语义更加明确。
  • 使用场景:用于封装核心业务逻辑。
  • 示例
java 复制代码
@Service
public class UserService {
    public User getUserById(Integer id) {
        // 实际场景中会调用 Repository 层查询数据库
        User user = new User();
        user.setId(id);
        user.setName("李四");
        return user;
    }
}

@Repository

  • 作用 :标记数据访问层(DAO 层)的组件,是 @Component 的特化版本。除了将类注册为 Bean 外,它还额外提供了持久化异常转换的功能。
  • 使用场景:用于封装数据访问逻辑,与数据库交互。
  • 示例
java 复制代码
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    User findByName(String name);
}

@Controller

  • 作用:标记控制层组件,用于接收 HTTP 请求并返回视图或数据。
  • 使用场景:Web 层控制器类,处理用户请求(如页面跳转、表单提交等)。
  • 示例
java 复制代码
@Controller
@RequestMapping("/user")
public class UserController {
    @GetMapping("/info")
    public String userInfo(Model model) {
        model.addAttribute("username", "张三");
        return "user-info"; // 返回视图名
    }
}

@RestController

  • 作用 :组合注解,相当于 @Controller + @ResponseBody。用于构建 RESTful API,返回 JSON/XML 等数据格式,而非视图。
  • 使用场景:前后端分离项目的接口层,提供 RESTful API(如移动端接口、前端 AJAX 请求接口)。
  • 示例
java 复制代码
@RestController
@RequestMapping("/api/user")
public class UserRestController {
    @GetMapping("/info")
    public User getUserInfo() {
        User user = new User();
        user.setId(1);
        user.setName("张三");
        return user; // 直接返回 User 对象,会自动转为 JSON
    }
}

三、依赖注入注解

  1. @Autowired

    • 作用:自动注入依赖的 Bean,Spring 会在 IoC 容器中查找匹配类型的 Bean 并注入到目标字段、构造方法或 setter 方法中。
    • 使用场景:需要注入其他 Bean 依赖时(如 Service 层注入 Repository 层、Controller 层注入 Service 层)。
    • 示例
java 复制代码
@RestController
public class UserRestController {
    private final UserService userService;

    @Autowired
    public UserRestController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/info")
    public User getUserInfo() {
        return userService.getUserById(1);
    }
}

@Qualifier

  • 作用 :与 @Autowired 一起使用,用于指定要注入的 Bean 的名称。当存在多个相同类型的 Bean 时,可以使用 @Qualifier 来指定注入哪一个。
  • 使用场景:解决相同类型 Bean 的歧义性注入问题。
  • 示例
java 复制代码
@RestController
public class UserRestController {
    private final UserService userService;

    @Autowired
    @Qualifier("userServiceImpl") // 指定注入的 Bean 名称
    public UserRestController(UserService userService) {
        this.userService = userService;
    }

    // ...
}

@Value

  • 作用 :注入配置文件中的值,可以注入 Stringintlongdoubleboolean 等类型。
  • 使用场景:从配置文件中读取配置值并注入到 Bean 的属性中。
  • 示例
java 复制代码
@Component
public class AppConfig {
    @Value("${server.port}")
    private int port;

    // ...
}

四、Web 开发注解

  1. @RequestMapping

    • 作用:映射 HTTP 请求到处理方法,可以用于类和方法上。用于指定请求 URL 和 HTTP 方法(GET、POST、PUT、DELETE 等)。
    • 使用场景:处理 Web 请求,将请求映射到具体的处理方法上。
    • 示例
java 复制代码
@RestController
@RequestMapping("/api/user")
public class UserRestController {
    @GetMapping("/info")
    public User getUserInfo() {
        // ...
    }

    @PostMapping("/create")
    public User createUser(@RequestBody User user) {
        // ...
    }
}

@GetMapping@PostMapping@PutMapping@DeleteMapping

  • 作用 :分别用于映射 HTTP GET、POST、PUT、DELETE 请求到处理方法上。它们是 @RequestMapping 的特化,分别对应不同的 HTTP 请求方法。
  • 使用场景:简化 RESTful API 的开发,直接对应 HTTP 方法。
  • 示例
java 复制代码
@RestController
@RequestMapping("/api/user")
public class UserRestController {
    @GetMapping("/info")
    public User getUserInfo() {
        // ...
    }

    @PostMapping("/create")
    public User createUser(@RequestBody User user) {
        // ...
    }
}

@RequestParam

  • 作用:用于将请求参数绑定到 Controller 方法的参数上。
  • 使用场景:获取 URL 查询参数或表单提交的参数。
  • 示例
java 复制代码
@GetMapping("/search")
public List<User> searchUsers(@RequestParam String name, @RequestParam(defaultValue = "10") int size) {
    // ...
}

@PathVariable

  • 作用:用于获取请求路径中的参数,通常用于 RESTful 风格的 API 上。
  • 使用场景:从 URL 路径中提取参数值。
  • 示例
java 复制代码
@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {
    // ...
}

@RequestBody

  • 作用:用于接收请求体中的 JSON 数据,并将其绑定到 Controller 方法的参数上。
  • 使用场景:处理 POST、PUT 等请求中的 JSON 数据。
  • 示例
java 复制代码
@PostMapping("/create")
public User createUser(@RequestBody User user) {
    // ...
}

@ResponseBody

  • 作用 :表示该方法的返回结果直接写入 HTTP 响应体中,返回数据的格式为 application/json。通常与 @Controller 一起使用,若使用 @RestController 则无需使用此注解。
  • 使用场景:返回 JSON/XML 等数据格式,而非视图。
  • 示例
java 复制代码
@Controller
public class UserController {
    @GetMapping("/info")
    @ResponseBody
    public User getUserInfo() {
        User user = new User();
        user.setId(1);
        user.setName("张三");
        return user;
    }
}
相关推荐
用户8307196840821 小时前
Spring Boot 启动报错:OpenFeign 隐性循环依赖,排查了整整一下午
java·spring boot·spring cloud
恼书:-(空寄1 小时前
事务绑定事件监听器的使用
java
星辰_mya1 小时前
@SpringBootApplication 与 SPI 机制的终极解密
java·spring boot·spring
add45a1 小时前
C++与自动驾驶系统
开发语言·c++·算法
xdl25991 小时前
【异常解决】Unable to start embedded Tomcat Nacos 启动报错
java·tomcat
坚持学习前端日记1 小时前
python对接comfyui的过程
开发语言·网络·python
是2的10次方啊1 小时前
串行与并行:高并发系统里的优雅接口设计
java
qiuyuyiyang2 小时前
SpringBoot中如何手动开启事务
java·spring boot·spring