锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. JAVA
  4. Spring Boot开发宝典!超实用50个注解一网打尽

Spring Boot开发宝典!超实用50个注解一网打尽

0
  • JAVA
  • 发布于 2024-08-12
  • 0 次阅读
黄健
黄健

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

心血制作,太干货,建议收藏!

一、Spring Boot 核心注解

  1. @SpringBootApplication

    这是 Spring Boot 项目的核心注解,包含了 @SpringBootConfiguration、@EnableAutoConfiguration 和 @ComponentScan。

    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

二、配置与自动配置

  1. @Configuration

    声明当前类是一个配置类。

    @Configuration
    public class AppConfig {
        // Bean definitions here
    }
    
  2. @EnableAutoConfiguration

    启用自动配置。

    // 通常包含在@SpringBootApplication中
    
  3. @ComponentScan

    自动扫描并加载组件。

    @ComponentScan(basePackages = "com.example")
    public class AppConfig {
    }
    

三、定义 Bean

  1. @Component

    泛指组件。

    @Component
    public class MyComponent {
    }
    
  2. @Service

    业务层组件。

    @Service
    public class MyService {
    }
    
  3. @Repository

    数据访问组件。

    @Repository
    public class MyRepository {
    }
    
  4. @Controller

    控制层组件。

    @Controller
    public class MyController {
    }
    
  5. @RestController

    控制层组件,返回数据直接写入 HTTP 响应体。

    @RestController
    public class MyRestController {
        // ...
    }
    

四、依赖注入

  1. @Autowired
自动注入依赖的 bean。
```
@Service
public class MyService {
    @Autowired
    private MyRepository repository;
}
```

五、配置属性

  1. @Value
注入 SpEL 表达式结果。
```
@Component
public class MyComponent {
    @Value("${app.name}")
    private String appName;
}
```

12. @ConfigurationProperties

绑定外部配置到 Java 对象。

```
@Component
@ConfigurationProperties(prefix = "app.database")
public class DatabaseProperties {
    // ...
}
```

六、测试相关

  1. @SpringBootTest
用于 Spring Boot 集成测试。
```
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyIntegrationTest {
    // ...
}
```

14. @MockBean

在测试环境中替换 bean 为 Mock 对象。

```
@SpringBootTest
public class MyServiceTest {
    @MockBean
    private MyRepository repository;
    // ...
}
```

七、RESTful Web 服务

  1. @GetMapping, @PostMapping, etc.
定义 HTTP 方法映射。
```
@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) {
        // ...
    }
}
```

16. @PathVariable

从 URL 路径中提取变量值。

```
// 如上例所示
```

17. @RequestBody

绑定请求体到方法参数。

```
// 如上RESTful Web服务示例所示
```

八、数据验证与绑定

  1. @Valid
开启方法级别验证。
```
public ResponseEntity<?> createUser(@Valid @RequestBody User user) {
    // ...
}
```

19. @NotNull, @Size, @Pattern 等

字段验证注解。

```
public class User {
    @NotNull private Long id;
    // ... other validations
}
```

九、AOP 相关

  1. @Aspect
声明一个切面。
```
@Aspect
@Component
public class LoggingAspect {
    // ...
}
```

21. @Before, @After, etc.

定义通知类型。

```
// 如AOP相关示例所示
```

十、缓存相关

  1. @EnableCaching
启用缓存支持。
```
@Configuration
@EnableCaching
public class CachingConfig {
    // ...
}
```

23. @Cacheable

标记方法结果可缓存。

```
@Cacheable("users")
public User getUserById(Long id) {
    // ...
}
```

十一、事务管理

  1. @Transactional
声明式事务管理。
```
@Service
public class UserService {
    @Transactional
    public void createUser(User user) {
        // ...
    }
}
```

十二、任务调度

  1. @EnableScheduling
启用任务调度支持。
```
@Configuration
@EnableScheduling
public class SchedulingConfig {
    // ...
}
```

26. @Scheduled

定义定时任务。

```
@Scheduled(fixedRate = 5000)
public void doSomething() {
    // ...
}
```

十三、消息队列

  1. @RabbitListener
RabbitMQ 消息监听器。
```
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {
    // ...
}
```

十四、缓存(注意:与 “缓存相关” 重复,这里提供其他缓存注解)

  1. @CachePut
更新缓存中的数据。
```
@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
    // ...
}
```

29. @CacheEvict

清除缓存条目(已在 “缓存相关” 中给出示例)。

十五、日志记录

  1. @Slf4j (Lombok 提供)
自动生成 SLF4J 的 Logger 实例。
```
@Slf4j
public class MyService {
    public void doSomething() {
        log.info("Doing something...");
    }
}
```

十六、异步执行

  1. @EnableAsync
启用异步方法执行支持。
```
@Configuration
@EnableAsync
public class AsyncConfig {
    // ...
}
```

32. @Async

标记方法为异步执行。

```
@Async
public void asyncMethod() {
    // ...
}
```

十七、异常处理

  1. @ControllerAdvice
全局异常处理。
```
@ControllerAdvice
public class GlobalExceptionHandler {
    // ...
}
```

34. @ExceptionHandler

处理特定异常。

```
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception e) {
    // ...
}
```

十八、事件监听

  1. @EventListener
监听并处理应用程序事件。
```
@EventListener
public void handleApplicationEvent(ApplicationEvent event) {
    // ...
}
```

十九、安全性

  1. @EnableWebSecurity
启用 Spring Security 的 Web 安全性。
```
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    // ...
}
```

37. @PreAuthorize, @Secured 等

方法级别的安全性注解。

```
@PreAuthorize("hasRole('ROLE_USER')")
public void secureMethod() {
    // ...
}
```

二十、条件化配置

  1. @ConditionalOnClass

用法说明:当类路径中存在指定的类时,才注册 bean。

@Configuration
@ConditionalOnClass(DataSource.class)
public class DataSourceConfig {
 // ...
}
  1. @ConditionalOnMissingBean

用法说明:当 Spring 容器中不存在指定类型的 bean 时,才注册 bean。

@Bean
@ConditionalOnMissingBean
public MyBean myBean() {
 return new MyBean();
}
  1. @ConditionalOnProperty

用法说明:根据配置文件中的属性值来条件化地注册 bean。

@Configuration
@ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
public class FeatureConfig {
 // ...
}

二十一、Spring Data JPA 相关

  1. @Entity

用法说明:标记一个类为实体类,映射到数据库中的一个表。

@Entity
public class User {
 // ...
}
  1. @Id

用法说明:标注用于标识实体的属性,通常映射到数据库表的主键列。

@Entity
public class User {
 @Id
 private Long id;
 // ...
}
  1. @RepositoryRestResource

用法说明:与 Spring Data REST 一起使用,为 JPA 仓库暴露 RESTful API。

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends JpaRepository<User, Long> {
 // ...
}

二十二、Web 相关扩展

  1. @ControllerAdvice (已在异常处理中给出示例)

用法说明(扩展):除了异常处理,还可以用于全局数据绑定、请求预处理等。

  1. @InitBinder

用法说明:在 Web 控制器中自定义数据绑定方法。

@InitBinder
public void initBinder(WebDataBinder binder) {
 // 自定义数据绑定逻辑
}

二十三、Spring MVC 相关

  1. @ModelAttribute

用法说明:绑定请求参数到模型属性,或者暴露一个方法参数为模型属性。

@ModelAttribute
public void populateModel(@RequestParam String attributeName, Model model) {
 model.addAttribute(attributeName, "attributeValue");
}
  1. @SessionAttributes

用法说明:将模型属性存储到 HTTP session 中。

@Controller
@SessionAttributes("attributeName")
public class MyController {
 // ...
}

二十四、性能监控与指标

  1. @EnableWebMvcMetrics (Spring Boot Actuator 提供)

用法说明:启用 Web MVC 的度量收集,如 HTTP 请求计数器、响应时间等。

// 通常通过添加spring-boot-starter-actuator依赖并配置相关属性来启用

二十五、国际化与本地化

  1. @MessageSource

用法说明:与 Spring 的国际化支持一起使用,定义消息源。

@Configuration
public class MessageSourceConfig {
 @Bean
 public MessageSource messageSource() {
     ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
     messageSource.setBasename("messages"); // 假设资源文件名为messages.properties
     return messageSource;
 }
}

这些注解覆盖了 Spring Boot 开发的多个方面,从核心功能到 Web 服务、数据访问、安全性、国际化等。正确使用这些注解可以大大提高开发效率和代码质量。

如果你渴望深入了解这 50 个注解的完整内容,想要获取更全面的知识和指导,那么请立即行动!关注我们,了解更多 java 和 web 前端学习干货。

标签: #JAVA 991
相关文章

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

SpringBoot整合异步任务执行 2024-10-08 11:24

同步任务: 同步任务是在单线程中按顺序执行,每次只有一个任务在执行,不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务,无法同时处理多个任务,响应慢,影响用 户体验 异步任务: 异步任务是在多线程中同时执行,多个任务可以并发执行,同时处理多个请求,响应快,资源

springboot kafka多数据源,通过配置动态加载发送者和消费者 2024-10-08 11:24

前言 最近做项目,需要支持kafka多数据源,实际上我们也可以通过代码固定写死多套kafka集群逻辑,但是如果需要不修改代码扩展呢,因为kafka本身不处理额外逻辑,只是起到削峰,和数据的传递,那么就需要对架构做一定的设计了。 准备test kafka本身非常容易上手,如果我们需要单元测试,引入ja

SpringBoot 集成 Redis 2024-10-08 11:24

一:SpringBoot 集成 Redis ①Redis是一个 NoSQL(not only)数据库, 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器;常用的数据类型: string , hash ,set ,zset , list ③通过Redis客户端可以使用多种语

SpringBoot整合QQ邮箱 2024-10-08 11:24

SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件…. 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,如果当前账号未开启的话自己手动开启。

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.