SpringBoot开发——Spring Boot 的9大类常用注解

server/2024/12/27 3:13:25/

文章目录

  • 1. 组件相关注解
    • 1.1 @Controller:
    • 1.2 @Service:
    • 1.3 @Repository:
    • 1.4 @Component:
  • 2. 与 Bean 实例和生命周期相关的注解
    • 2.1 @Bean:
    • 2.2 @Scope:
    • 2.3 @Primary:
    • 2.4 @PostConstruct:
    • 2.5 @PreDestroy:
  • 3. 依赖注入注解
    • 3.1 @Autowired:
    • 3.2 @Resource:
    • 3.3 @Qualifier:
  • 4. SpringMVC 相关注解
    • 4.1 @RequestMapping:
    • 4.2 @RequestBody:
    • 4.3 @ResponseBody:
    • 4.4 @RestController:
    • 4.5 @RequestParam:
    • 4.6 @PathVariable:
    • 4.7 @GetMapping、@PostMapping、@PutMapping、@DeleteMapping:
  • 5. 配置相关注解
    • 5.1 @Configuration:
    • 5.2 @EnableAutoConfiguration:
    • 5.3 @ComponentScan:
    • 5.4 @SpringBootApplication:
    • 5.5 @EnableTransactionManagement:
    • 5.6 @ConfigurationProperties:
    • 5.7 @Conditional:
    • 5.8 @Value:
    • 5.9 @ConfigurationProperties:
    • 5.10 @PropertySource:
    • 5.11 @ImportResource:
  • 6. JPA 相关注解
    • 6.1 @Entity 和@Table:
    • 6.2 @Id:
    • 6.3 @Column:
    • 6.4 @GeneratedValue:
    • 6.5 @SequenceGenerator:
    • 6.6 @Transient:
    • 6.7 @Basic(fetch = FetchType.LAZY):
    • 6.8 @JoinColumn:
    • 6.9 @OneToOne、@OneToMany 和@ManyToOne:
  • 7. 异常处理相关注解
    • 7.1 @ControllerAdvice 和@ExceptionHandler:
  • 8. AOP 相关注解
    • 8.1 @Aspect:
    • 8.2 @Before:
    • 8.3 @After:
    • 8.4 @AfterReturning:
    • 8.5 @AfterThrowing:
    • 8.6 @Around:
    • 8.7 @Pointcut:
    • 8.8 @Order:
  • 9. 测试相关注解
    • 9.1 @Test:
    • 9.2 @ActiveProfiles:
    • 9.3 @RunWith 和@SpringBootTest:

在这里插入图片描述

1. 组件相关注解

1.1 @Controller:

用于修饰 MVC 中控制器层的组件。Spring Boot 中的组件扫描功能会识别此注解,并为被修饰的类实例化一个对象。它通常与@RequestMapping 一起使用。当 Spring MVC 收到请求时,会将其转发到指定路径的方法进行处理。

@Controller
@RequestMapping("/user/admin")
public class UserAdminController {
}

1.2 @Service:

通常用于修饰服务层的组件。声明一个对象时,会实例化该类对象并将其注入到 bean 容器中。

@Service
public class UserService {//...
}

1.3 @Repository:

用于修饰数据访问对象(DAO)层的组件。DAO 层的组件专注于系统数据的处理,例如数据库中的数据。它们也会被组件扫描并生成实例化对象。

@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {//...
}

1.4 @Component:

一般指代组件。当组件难以分类时,可以使用此注解进行标记。其功能与@Service 类似。

@Component
public class DemoHandler {//...
}

2. 与 Bean 实例和生命周期相关的注解

2.1 @Bean:

用于修饰方法,表示该方法将创建一个 Bean 实例,并由 Spring 容器进行管理。示例代码如下:

@Configuration
public class AppConfig {// 相当于在 XML 中配置一个 Bean@Beanpublic Uploader initFileUploader() {return new FileUploader();}
}

2.2 @Scope:

用于声明 Spring Bean 实例的作用域。作用域如下:

  • singleton:单例模式。在 Spring 容器中实例是唯一的,这是 Spring 的默认实例作用域类型。
  • prototype:原型模式。每次使用时都会重新创建实例。
  • request:在同一请求中使用相同的实例,不同请求创建新的实例。
  • session:在同一会话中使用相同的实例,不同会话创建新的实例。
@Configuration
public class RestTemplateConfig {@Bean@Scope("singleton")public RestTemplate restTemplate() {return new RestTemplate();}
}

2.3 @Primary:

当存在同一对象的多个实例时,优先选择此实例。

@Configuration
@ComponentScan
public class JavaConfig {// 首选@Bean("b1")@PrimaryB b1() {return new B();}@Bean("b2")B b2() {return new B();}
}

2.4 @PostConstruct:

用于修饰方法,在对象实例创建和依赖注入完成后执行,可用于初始化对象实例。

2.5 @PreDestroy:

用于修饰方法,在对象实例即将被 Spring 容器移除时执行,可用于释放对象实例持有的资源。

public class Demo {public Demo() {System.out.println("构造方法...");}public void init() {System.out.println("init...");}
}@PostConstruct
public void postConstruct() {System.out.println("postConstruct...");
}@PreDestroy
public void preDestroy() {System.out.println("preDestroy...");
}public void destroy() {System.out.println("destroy...");
}

输出:

构造方法...
postConstruct...
init...
preDestroy...
destroy...

3. 依赖注入注解

3.1 @Autowired:

根据对象的类型自动注入依赖对象。默认情况下,它要求注入的对象实例必须存在。可以配置 required = false 来注入可能不存在的对象。

@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@Autowired(required = false)private UserConfig userConfig;
}

3.2 @Resource:

默认情况下,根据对象的名称自动注入依赖对象。如果要根据类型注入,可以设置属性

type = UmsAdminService.class@Controller
@RequestMapping("/user")
public class UserController {@Resource(name = "userServiceImpl")private UserService userService;
}

3.3 @Qualifier:

当存在同一类型的多个 bean 时,使用@Autowired 导入会导致错误,表示当前对象不唯一,Spring 不知道要导入哪个依赖。此时,我们可以使用@Qualifier 进行更细粒度的控制并选择其中一个实例。它通常与@Autowired 一起使用。示例如下:

@Autowired
@Qualifier("deptService")
private 

http://www.ppmy.cn/server/153120.html

相关文章

每天40分玩转Django:Django测试

Django测试 一、今日学习内容概述 学习模块重要程度主要内容测试基础⭐⭐⭐⭐⭐TestCase、断言方法模型测试⭐⭐⭐⭐⭐模型方法、数据验证视图测试⭐⭐⭐⭐请求处理、响应验证表单测试⭐⭐⭐⭐表单验证、数据处理覆盖率测试⭐⭐⭐⭐coverage配置、报告生成 二、测试基础示例…

修改el-select下拉框高度;更新:支持动态修改

文章目录 效果动态修改&#xff1a;效果代码固定高度版本动态修改高度版本&#xff08;2024-12-25 更新&#xff1a; 支持动态修改下拉框高度&#xff09; 效果 动态修改&#xff1a;效果 代码 固定高度版本 注意点&#xff1a; popper-class 尽量独一无二&#xff0c;防止影…

【HarmonyOS】如何读取Raw下的JSON文件内容

【HarmonyOS】如何读取Raw下的JSON文件内容 一、问题背景&#xff1a; 读取工程中/resources下json文件&#xff0c;json文件推荐放在rawfile路径下&#xff0c;通过getRawFileContent接口访问。但是通过该接口拿到的是Uint8Array类型数据&#xff0c;那怎么拿到JSON的文本内…

常用git命令大全

目录 前言&#xff1a; 初始化仓库&#xff1a; 配置&#xff1a; 查看仓库文件&#xff1a; 查看仓库配置&#xff1a; 添加文件&#xff1a; 提交更改&#xff1a; 查看状态&#xff1a; 查看日志&#xff1a; 回滚&#xff1a; 分支管理&#xff1a; 切换分支&a…

东子生物完成A轮战略融资,数字商品交易全新升级为数商时代

2024年11月23日&#xff0c;东子生物数字时代正式上线&#xff0c;标志着公司全面迈入“数商时代”&#xff0c;作为国内领先的生物科技企业&#xff0c;东子生物在数字化浪潮中精准布局&#xff0c;以创新科技推动产业升级&#xff0c;以全新的思维引领健康产业&#xff0c;兼…

反汇编一个简单的C程序

基于最简单的代码示例&#xff0c;一步步分析每一段汇编代码&#xff0c;对于堆栈变化 一、编译C代码 int g(int x) {return x 3; } int f(int x) {return g(x); } int main(void) {return f(8) 1; }编译 gcc -S -o main.s main.c -m32得到汇编代码 g:pushl %ebpmovl …

Avalonia实例实战五:Carousel自动轮播图

文章目录 一、加载图片不使用avares:直接路径访问:使用avares:访问:二、使用Carousel控件官网示例:增加间隔3秒自动滑动三、使用自定义用户控件实现带RadioButton的轮播控件四、效果一、加载图片 将三张Png图片加载到项目中,在访问前,必须将路径添加到资源中,在csprojec…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…