1. 启动类注解
@SpringBootApplication:
- 它是 Spring Boot 的核心注解,包含了
@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
三个注解。 @SpringBootConfiguration
:标注当前类为配置类,类似于 Spring 的@Configuration
注解,用于配置 Spring Boot 应用的各种设置。@EnableAutoConfiguration
:开启 Spring Boot 的自动配置功能,根据项目依赖自动配置相关的 Bean。比如,如果项目依赖了spring-boot-starter-web
,它会自动配置 Spring MVC、Tomcat 等组件。@ComponentScan
: 扫描指定的包路径,寻找并注册相关的 Bean,比如 Controller、Service 等。
示例:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
- 它是 Spring Boot 的核心注解,包含了
2. 配置类注解
@Configuration:
- 标注当前类为配置类,用于定义 Bean 和其他配置信息。
- 可以用
@Bean
注解定义一个 Bean,并返回 Bean 实例。
示例:
@Configuration public class MyConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
@ConfigurationProperties:
- 将配置文件中的属性映射到 Java Bean 上,方便管理配置信息。
- 可以使用
@Value
注解注入单个属性,但@ConfigurationProperties
可以方便地将整个配置文件映射到 Bean 上。
示例:
@ConfigurationProperties(prefix = "my.app") public class MyAppProperties { private String name; private int port; // getter and setter } @Configuration public class MyConfig { @Bean public MyAppProperties myAppProperties() { return new MyAppProperties(); } }
在
application.properties
中配置:my.app.name=My Application my.app.port=8080
@EnableConfigurationProperties:
- 启用
@ConfigurationProperties
注解,允许将配置属性注入到 Bean 中。
示例:
@Configuration @EnableConfigurationProperties(MyAppProperties.class) public class MyConfig { // ... }
- 启用
@PropertySource:
- 指定配置文件的位置,可以加载多个配置文件。
示例:
@Configuration @PropertySource("classpath:my-config.properties") public class MyConfig { // ... }
3. 控制器层注解
@RestController:
- 标注当前类为一个 REST 控制器,返回 JSON 格式的数据。
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping:
- 用于处理不同类型的 HTTP 请求。
- 类似于 Spring MVC 的
@RequestMapping
注解,但更加简洁。
示例:
@RestController public class UserController { @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { // ... } @PostMapping("/users") public User createUser(@RequestBody User user) { // ... } }
@PathVariable、@RequestParam、@RequestBody:
- 用于获取请求参数。
@PathVariable
用于获取 URL 中的路径变量。@RequestParam
用于获取 URL 中的查询参数。@RequestBody
用于获取请求体内容。
@ResponseBody:
- 将返回值转换成 JSON 格式的数据,直接返回给客户端。
- 在
@RestController
中默认使用@ResponseBody
,因此不需要显式声明。
4. 服务层注解
@Service:
- 标注当前类为一个服务层类,用于定义业务逻辑。
@Transactional:
- 开启事务管理,确保多个操作的原子性。
示例:
@Service public class UserService { @Transactional public void updateUser(User user) { // ... } }
5. 实体类注解
@Entity:
- 标注当前类为一个实体类,用于映射数据库中的表。
@Table:
- 指定实体类映射的数据库表名。
@Id:
- 标注主键字段。
@Column:
- 指定字段名和数据类型。
@GeneratedValue:
- 指定主键生成策略。
示例:
@Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; // ... }
6. 其他常用注解
@Autowired:
- 自动注入依赖,类似于 Spring 的
@Resource
注解。 - 用于注入其他 Bean。
示例:
@Service public class UserService { @Autowired private UserRepository userRepository; // ... }
- 自动注入依赖,类似于 Spring 的
@Component:
- 标注当前类为一个组件,可以被 Spring 容器管理。
示例:
@Component public class MyComponent { // ... }
@Qualifier:
- 用于解决多个 Bean 冲突,指定要注入的 Bean 的名称。
示例:
@Service public class UserService { @Autowired @Qualifier("myUserRepository") private UserRepository userRepository; // ... }
@Value:
- 注入配置文件中的属性值。
示例:
@Component public class MyComponent { @Value("${my.app.name}") private String appName; // ... }
@Bean:
- 在
@Configuration
类中,定义一个 Bean。
示例:
@Configuration public class MyConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
- 在
@Import:
- 导入其他配置类。
示例:
@SpringBootApplication @Import(MyConfig.class) public class MyApplication { // ... }
7. Spring Data JPA 注解
@Repository:
- 标注当前类为一个数据访问层类。
@Query:
- 自定义 SQL 查询语句。
@Modifying:
- 标注更新操作。
示例:
@Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT u FROM User u WHERE u.name = :name") User findByName(@Param("name") String name); @Modifying @Query("UPDATE User u SET u.name = :newName WHERE u.id = :id") void updateName(@Param("id") Long id, @Param("newName") String newName); }
8. Spring Security 注解
@EnableWebSecurity:
- 启用 Spring Security 的安全配置。
@PreAuthorize:
- 授权验证,例如
@PreAuthorize("hasRole('ADMIN')")
。
- 授权验证,例如
@Secured:
- 授权验证,类似于
@PreAuthorize
。
示例:
@PreAuthorize("hasRole('ADMIN')") @GetMapping("/admin") public String adminPage() { // ... }
- 授权验证,类似于
9. Spring Cloud 注解
@EnableEurekaServer:
- 启用 Eureka Server。
@EnableDiscoveryClient:
- 启用服务注册和发现。
@FeignClient:
- 声明一个 Feign 客户端。
@HystrixCommand:
- 启用 Hystrix 熔断机制。
示例:
@FeignClient(name = "user-service") public interface UserServiceClient { @GetMapping("/users/{id}") User getUser(@PathVariable Long id); }