springboot常用注解大全(超详细, 30个)
Spring Boot注解主要用于简化配置、自动装配组件和实现声明式服务。
·
Spring Boot注解主要用于简化配置、自动装配组件和实现声明式服务。以下是详细的介绍:
1、Springboot注解
核心注解
1. @SpringBootApplication
- 作用: 标注一个主程序类,表明这是一个Spring Boot应用程序的入口。
- 功能: 这是一个复合注解,组合了
@Configuration
、@EnableAutoConfiguration
和@ComponentScan
。@Configuration
: 标识一个类作为配置类,类似于Spring XML配置文件。@EnableAutoConfiguration
: 启用Spring Boot的自动配置机制,根据项目中的依赖和应用上下文自动配置Spring应用程序。@ComponentScan
: 自动扫描指定包及其子包中的Spring组件。
- 示例:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
自动配置注解
2. @EnableAutoConfiguration
- 作用: 启用Spring Boot的自动配置机制,根据项目中的依赖和应用上下文自动配置Spring应用程序。
- 细节: 它会尝试根据添加的依赖和项目中的配置自动配置Spring Bean。例如,如果项目中有HSQLDB的依赖,Spring Boot会自动配置一个内存数据库。
- 示例:
@EnableAutoConfiguration public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
3. @Configuration
- 作用: 标注一个类作为配置类,相当于一个Spring XML配置文件。
- 细节: 配置类可以包含一个或多个
@Bean
注解的方法,这些方法会返回要注册到Spring应用上下文中的Bean。 - 示例:
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
组件扫描和注入注解
4. @ComponentScan
- 作用: 指定要扫描的包,以便发现和注册Spring组件。
- 细节: 默认情况下,
@ComponentScan
会扫描主应用类所在的包及其子包。 - 示例:
@ComponentScan(basePackages = "com.example") public class MyApplication { }
5. @Component
- 作用: 将一个类标识为Spring组件(Bean),可以被Spring容器自动检测和注册。
- 细节:
@Component
是一个通用的注解,可以用来标注任何Spring管理的Bean。 - 示例:
@Component public class MyComponent { }
6. @Service
- 作用: 标识服务层组件,实际上是
@Component
的一个特化,用于表示业务逻辑服务。 - 细节: 用于标识服务层的类,这些类通常包含业务逻辑。
- 示例:
@Service public class MyService { }
7. @Repository
- 作用: 标识持久层组件,实际上是
@Component
的一个特化,用于表示数据访问组件
。
数据访问组件
(Data Access Component)通常是指在软件系统中负责数据访问和持久化的部分或模块。在典型的企业应用程序中,数据访问组件通常涉及与数据库交互、执行数据操作(如增删改查)、数据转换和持久化等任务。
- 示例:
@Repository public class MyRepository { }
8. @Controller
- 作用: 标识控制层组件,实际上是
@Component
的一个特化,用于表示Web控制器。 - 细节: 用于标识Spring MVC控制器,处理Web请求并返回视图。
- 示例:
@Controller public class MyController { }
9. @RestController
- 作用: 标识一个RESTful Web服务的控制器,实际上是
@Controller
和@ResponseBody
的结合。 - 细节: 返回的对象会自动序列化为JSON或XML,并写入HTTP响应体中。
- 示例:
@RestController public class MyRestController { }
数据绑定和验证注解
10. @RequestMapping
- 作用: 映射HTTP请求到处理方法上(GET、POST、PUT、DELETE等)。
- 示例:
@Controller public class MyController { @RequestMapping("/hello") public String sayHello() { return "hello"; } }
11. @GetMapping
- 作用: 映射HTTP GET请求到处理方法上。
- 示例:
@RestController public class MyRestController { @GetMapping("/users") public List<User> getUsers() { return userService.getAllUsers(); } }
12. @PostMapping
- 作用: 映射HTTP POST请求到处理方法上。
- 示例:
@RestController public class MyRestController { @PostMapping("/users") public User
13. @ResponseBody
- 作用: 将方法的返回值转换为指定格式(如JSON、XML)作为HTTP响应的内容返回给客户端。
- 细节: 常用于RESTful服务中,标识方法返回的对象不是视图名称,而是直接写入HTTP响应体中的数据。
- 示例:
@RestController public class MyRestController { @GetMapping("/hello") @ResponseBody public String sayHello() { return "Hello, World!"; } }
14. @RequestBody
- 作用: 将HTTP请求体的内容(如JSON、XML等)映射到一个Java对象。
- 细节: 通常用于POST请求中,将客户端发送的数据绑定到方法的参数上。
- 示例:
@RestController public class MyRestController { @PostMapping("/users") public ResponseEntity<String> addUser(@RequestBody User user) { // 处理用户添加逻辑 return ResponseEntity.ok("User added successfully"); } }
15. @PathVariable
- 作用: 从URI路径中提取参数值,将其映射到方法的参数上。
- 细节: 常用于RESTful服务中,允许动态地将URL中的部分作为方法参数使用。
- 示例:
@RestController public class MyRestController { @GetMapping("/users/{userId}") public ResponseEntity<User> getUserById(@PathVariable Long userId) { // 根据userId查询用户信息 User user = userService.getUserById(userId); return ResponseEntity.ok(user); } }
16. @RequestParam
- 作用: 用于从请求中获取参数的值。
- 细节: 可以指定参数的默认值,是否必需等属性。适用于处理查询参数或表单数据。
- 示例:
@RestController public class MyRestController { @GetMapping("/users") public ResponseEntity<User> getUserByName(@RequestParam String username) { // 根据用户名查询用户信息 User user = userService.getUserByUsername(username); return ResponseEntity.ok(user); } }
这些注解是Spring MVC和Spring Boot中常用的数据绑定和处理注解,帮助开发者更方便地处理HTTP请求和响应,实现灵活的接口设计和数据交互。
数据访问注解
17. @Entity
- 作用: 标识一个JPA实体。
- 细节: 用于定义一个与数据库表映射的持久化类。
- 示例:
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; }
18. @Table
- 作用: 指定实体对应的数据库表名称。
- 细节: 如果类名与数据库表名不同,可以使用
@Table
注解进行指定。 - 示例:
@Entity @Table(name = "users") public class User { // fields and methods }
其他常用注解
19. @Value
- 作用: 用于将外部属性值注入到Spring Bean中。
- 细节: 可以用于注入属性文件中的值、系统环境变量、系统属性等。
- 示例:
@Value("${my.property}") private String myProperty;
20. @Autowired
- 作用: 自动装配Bean,进行依赖注入。
- 细节: Spring会自动满足Bean的依赖。可以用于字段、构造函数和方法上。
- 示例:
@Service public class MyService { @Autowired private MyRepository myRepository; }
21. @Bean
- 作用: 用于定义一个Spring Bean。
- 细节: 通常用于配置类中,定义的方法返回的对象会被注册为Spring容器中的Bean。
- 示例:
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
22. @Conditional
- 作用: 根据特定条件创建Bean。
- 细节: 可以与自定义条件类一起使用,只有在条件满足时,Spring才会创建该Bean。
- 示例:
@Bean @Conditional(MyCondition.class) public MyService myService() { return new MyServiceImpl(); }
23. @Primary
- 作用: 指定当一个接口有多个实现时,优先选择的Bean。
- 示例:
@Service @Primary public class PrimaryService implements MyService { }
24. @Qualifier
- 作用: 配合
@Autowired
使用,用于指定注入的Bean的名称或ID。 - 示例:
@Service public class MyService { @Autowired @Qualifier("myRepositoryImpl") private MyRepository myRepository; }
25. @Lazy
- 作用: 延迟初始化Bean,只有在首次使用时才创建Bean。
- 示例:
@Service @Lazy public class LazyService { }
26. @Scope
- 作用: 指定Bean的作用域(单例、多例、请求、会话等)。
- 示例:
@Service @Scope("prototype") public class PrototypeService { }
其他注解
简化POJO开发的注解
这三个注解通常与Lombok(一种Java库)结合使用,用于简化POJO(Plain Old Java Object)的开发。
1. @Data
-
作用:
@Data
是一个复合注解,集成了@ToString
、@EqualsAndHashCode
、@Getter
、@Setter
和@RequiredArgsConstructor
的功能。 -
功能:
@ToString
: 自动生成toString()
方法,包含所有字段。@EqualsAndHashCode
: 自动生成equals()
和hashCode()
方法,基于所有非静态和非瞬态字段。@Getter
和@Setter
: 自动生成字段的 getter 和 setter 方法。@RequiredArgsConstructor
: 自动生成包含必需字段的构造方法。
-
示例:
import lombok.Data; @Data public class User { private Long id; private String username; private String email; }
编译时,Lombok会自动生成如下代码:
public class User { private Long id; private String username; private String email; // 自动生成的 toString(), equals(), hashCode(), getter 和 setter 方法 // 以及包含所有字段的构造方法 }
2. @AllArgsConstructor
-
作用: 自动生成包含所有字段的构造方法。
-
示例:
import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor public class User { private Long id; private String username; private String email; }
编译时,Lombok会自动生成如下构造方法:
public User(Long id, String username, String email) { this.id = id; this.username = username; this.email = email; }
3. @NoArgsConstructor
-
作用: 自动生成无参构造方法。
-
示例:
import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor public class User { private Long id; private String username; private String email; }
编译时,Lombok会自动生成如下无参构造方法:
public User() { // 空构造方法 }
文章到这里就这束了!~
其他文章地址:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献9条内容
所有评论(0)