Spring Boot 这么火,常用注解和原理都给你整理好了!

Spring & Spring Boot 常用注解整理 Spring 和 Spring Boot 中的注解是简化开发的重要工具,通过注解可以告诉框架如何处理类、方法或变量。核心概念是注解类似于“便利贴”,用于标记代码的特殊用途,让框架自动处理对象的创建、依赖注入等任务。在 IOC(控制反转)和 DI(依赖注入)中,常用注解包括 @Component、@Service、@Repository、@Controller 等,用于标记不同类型的组件,并由 Spring 容器管理。@Autowired 用于自动注入依赖,@Qualifier 用于指定注入的 Bean 名称 阅读详情
  • 作者: 云天 

  • https://www.cnblogs.com/tqlin/p/11687811.html

一、启动注解 @SpringBootApplication

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public@interfaceSpringBootApplication{
}

查看源码可发现, @SpringBootApplication是一个复合注解,包含了 @SpringBootConfiguration, @EnableAutoConfiguration`,@ComponentScan` 这三个注解

`@SpringBootConfiguration注解,继承 @Configuration注解,主要用于加载配置文件 @SpringBootConfiguration继承自 @Configuration,二者功能也一致,标注当前类是配置类, 并会将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 spring 容器中,并且实例名就是方法名。

@EnableAutoConfiguration 注解,开启自动配置功能 @EnableAutoConfiguration可以帮助 SpringBoot 应用将所有符合条件的 @Configuration配置都加载到当前 SpringBoot 创建并使用的 IoC 容器。借助于 Spring 框架原有的一个工具类:SpringFactoriesLoader 的支持, @EnableAutoConfiguration可以智能的自动配置功效才得以大功告成

@ComponentScan 注解,主要用于组件扫描和自动装配 @ComponentScan的功能其实就是自动扫描并加载符合条件的组件或 bean 定义,最终将这些 bean 定义加载到容器中。我们可以通过 basePackages 等属性指定 @ComponentScan自动扫描的范围,如果不指定,则默认 Spring 框架实现从声明 @ComponentScan所在类的 package 进行扫描,默认情况下是不指定的,所以 SpringBoot 的启动类最好放在 root package 下。

二、Controller 相关注解

@Controller

控制器,处理 http 请求。

@RestController 复合注解

查看 @RestController 源码

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public@interfaceRestController{
@AliasFor(annotation = Controller.class)
String value() default"";
}

从源码我们知道, @RestController注解相当于 @ResponseBody+ @Controller合在一起的作用, RestController 使用的效果是将方法返回的对象直接在浏览器上展示成 json 格式.

@RequestBody

通过 HttpMessageConverter 读取 Request Body 并反序列化为 Object(泛指)对象

@RequestMapping

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上

@GetMapping 用于将 HTTP get 请求映射到特定处理程序的方法注解

注解简写:@RequestMapping(value = "/say",method = RequestMethod.GET) 等价于:@GetMapping(value = "/say")

GetMapping 源码

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public@interfaceGetMapping{
}

是 @RequestMapping(method = RequestMethod.GET) 的缩写

@PostMapping 用于将 HTTP post 请求映射到特定处理程序的方法注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.POST)
public@interfacePostMapping{
}

是 @RequestMapping(method = RequestMethod.POST) 的缩写

三、取请求参数值

@PathVariable: 获取 url 中的数据

@Controller
@RequestMapping("/User")
publicclassHelloWorldController{
@RequestMapping("/getUser/{uid}")
publicString getUser(@PathVariable("uid")Integer id, Model model) {
System.out.println("id:"+id);
return"user";
}
}

请求示例:http://localhost:8080/User/getUser/123

@RequestParam: 获取请求参数的值

@Controller
@RequestMapping("/User")
publicclassHelloWorldController{
@RequestMapping("/getUser")
publicString getUser(@RequestParam("uid")Integer id, Model model) {
System.out.println("id:"+id);
return"user";
}
}

请求示例:http://localhost:8080/User/getUser?uid=123

四、注入 bean 相关

@Repository DAO 层注解,DAO 层中接口继承 JpaRepository, 需要在 build.gradle 中引入相关 jpa 的一个 jar 自动加载。

Repository 注解源码

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public@interfaceRepository{
@AliasFor(annotation = Component.class)
String value() default"";
}
@Service
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public@interfaceService{
@AliasFor(annotation = Component.class)
String value() default"";
}

@Service 是 @Component 注解的一个特例,作用在类上 @Service 注解作用域默认为单例 使用注解配置和类路径扫描时,被 @Service 注解标注的类会被 Spring 扫描并注册为 Bean @Service 用于标注服务层组件, 表示定义一个 bean @Service 使用时没有传参数,Bean 名称默认为当前类的类名,首字母小写 @Service(“serviceBeanId”) 或 @Service(value=”serviceBeanId”) 使用时传参数,使用 value 作为 Bean 名字 @Scope 作用域注解 @Scope 作用在类上和方法上,用来配置 spring bean 的作用域,它标识 bean 的作用域

@Scope 源码

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceScope{
@AliasFor("scopeName")
String value() default"";
@AliasFor("value")
String scopeName() default"";
ScopedProxyMode proxyMode() defaultScopedProxyMode.DEFAULT;
}

属性介绍

value

  • singleton   表示该 bean 是单例的。(默认)

  • prototype   表示该 bean 是多例的,即每次使用该 bean 时都会新建一个对象。

  • request     在一次 http 请求中,一个 bean 对应一个实例。

  • session     在一个 httpSession 中,一个 bean 对应一个实例。

proxyMode

  • DEFAULT         不使用代理。(默认)

  • NO              不使用代理,等价于 DEFAULT。

  • INTERFACES      使用基于接口的代理 (jdk dynamic proxy)。

  • TARGET_CLASS    使用基于类的代理 (cglib)。

@Entity 实体类注解

@Table(name ="数据库表名"),这个注解也注释在实体类上,对应数据库中相应的表。

@Id、@Column 注解用于标注实体类中的字段,pk 字段标注为 @Id,其余 @Column。

@Bean 产生一个 bean 的方法

@Bean 明确地指示了一种方法,产生一个 bean 的方法,并且交给 Spring 容器管理。支持别名 @Bean("xx-name")

@Autowired 自动导入

@Autowired 注解作用在构造函数、方法、方法参数、类字段以及注解上

@Autowired 注解可以实现 Bean 的自动注入

@Component 把普通 pojo 实例化到 spring 容器中,相当于配置文件中的

虽然有了 @Autowired, 但是我们还是要写一堆 bean 的配置文件, 相当麻烦, 而 @Component 就是告诉 spring, 我是 pojo 类, 把我注册到容器中吧, spring 会自动提取相关信息。那么我们就不用写麻烦的 xml 配置文件了

五、导入配置文件

@PropertySource 注解

引入单个 properties 文件:

@PropertySource(value = {"classpath : xxxx/xxx.properties"})

引入多个 properties 文件:

@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})

@ImportResource 导入 xml 配置文件

可以额外分为两种模式 相对路径 classpath,绝对路径(真实路径)file

注意:单文件可以不写 value 或 locations,value 和 locations 都可用

相对路径(classpath)

引入单个 xml 配置文件:@ImportSource("classpath : xxx/xxxx.xml")

引入多个 xml 配置文件:@ImportSource(locations={"classpath : xxxx.xml" , "classpath : yyyy.xml"})

绝对路径(file)

引入单个 xml 配置文件:@ImportSource(locations= {"file : d:/hellxz/dubbo.xml"})

引入多个 xml 配置文件:@ImportSource(locations= {"file : d:/hellxz/application.xml" , "file : d:/hellxz/dubbo.xml"})

取值:使用 @Value 注解取配置文件中的值

@Value("${properties 中的键}") private String xxx;

@Import 导入额外的配置信息

功能类似 XML 配置的,用来导入配置类,可以导入带有 @Configuration 注解的配置类或实现了 ImportSelector/ImportBeanDefinitionRegistrar。

使用示例

@SpringBootApplication
@Import({SmsConfig.class})
publicclassDemoApplication{
publicstaticvoid main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}

六、事务注解 @Transactional

在 Spring 中,事务有两种实现方式,分别是编程式事务管理和声明式事务管理两种方式

编程式事务管理:编程式事务管理使用 TransactionTemplate 或者直接使用底层的 PlatformTransactionManager。对于编程式事务管理,spring 推荐使用 TransactionTemplate。声明式事务管理:建立在 AOP 之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,通过 @Transactional 就可以进行事务操作,更快捷而且简单。推荐使用

七、全局异常处理

  • @ControllerAdvice 统一处理异常

  • @ControllerAdvice 注解定义全局异常处理类

@ControllerAdvice
publicclassGlobalExceptionHandler{
}
@ExceptionHandler注解声明异常处理方法
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
@ResponseBody
String handleException(){
return"Exception Deal!";
}
}

(完)

【推荐阅读】

超全 MyBatis 动态 SQL 详解!(看完 SQL 爽多了)

从理论到综合实例,终于弄懂了双工通讯协议websocket!

作为开发人员,你不得不懂的Github搜索技巧!

优秀!高级Java都这样优雅处理空值

SpringBoot 微信点餐开源系统

好文!必须点赞

WRF-BEM相关参数说明 本参数适用于WRF-BEM模拟武汉市气候。 阅读详情

相关推荐

基于LSTM算法的股票预测详解

一、需求 给定几个已知的股市因素(开盘、收盘、最高、最低、成交量、成交额)及各因素对应的大量数据,训练一个该股票的涨跌趋势的预测模型。并在给定的测试数据的条件下求出接下来的涨跌趋势。即得到下图中的label值。-1代表跌、1代表涨。 二、分析 1、LSTM简单介绍 LSTM这个算法是专门训练有时间序列信息的数据的,即这些数据不仅按照时间递增的顺序排布,并且前后的数据都有着很强的联系。个人认为与马尔可夫的思想差不多,即后面的值由前面的值来决定。本次需求是要根据已知的股市数据来分析某个时间段的涨跌趋势,并预测

Zhang_713的博客 1万+

controller注解

controller

weixin_66119119的博客 2796

华为防火墙双ISP出口实战:如何用策略路由实现电信联通流量自动切换(附配置截图)

本文详细解析了华为防火墙在双ISP环境下的智能选路技术,通过策略路由与健康检测的深度应用,实现电信联通流量的自动切换。文章包含实战配置截图,帮助企业解决切换延迟、路径劣化等核心挑战,提升业务连续性。

backprop5master的博客 643

2020-10-10

@Controller、@RestController注解区别: @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用。 一、@Controller注解 @Controller 是Spring框架提供的注解。 @Controller标识的类,该类代表控制器类(控制层/表现层)。 这里控制层里面的每个方法,都可以去调用@Service标识的类(业务逻辑层),@Service标识的类中的方法可以继续调用@Resposity标识的接口实现类(D

weixin_45723025的博客 549

PowerBuilder 9 遗留系统逆向实战:3款反编译工具对比与关键DLL破解

本文深入探讨了PowerBuilder 9遗留系统的逆向工程实战,对比分析了PBKiller、PB DeCompiler和Shudepb三款反编译工具的核心功能与适用场景,并详细解析了关键DLL破解技术。通过IDA和OllyDbg等工具的应用,提供了从静态解构到动态追踪的完整逆向方法论,帮助开发者有效维护老旧PB系统。

cucanqi9387的博客 1379

项目管理中 PMO 的关键职能解析

在企业数字化转型与战略落地的浪潮中,PMO(Project Management Office,项目管理办公室)逐渐从“项目辅助角色”升级为“组织级战略执行中枢”。然而,多数人对PMO的认知仍停留在“管项目的部门”或“文档审核机器”的层面。本文将打破误解,通过生活化类比(如“中枢神经”“导航系统”)、流程图解(战略对齐循环)、实际案例(制造企业PMO升级),深入解析PMO的五大核心职能:战略对齐、流程标准化、资源管理、绩效监控、知识沉淀。最终揭示PMO的本质——

项目管理的博客 1250

java controller注解原理_SpringMVC 基于注解的Controller详解

本文出处http://blog.youkuaiyun.com/lufeng20/article/details/7598801概述继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller 的映射关系,仅仅使用注解就可以让一...

weixin_36338946的博客 671

PCF8591实战指南:从IIC通信到STM32的ADC/DAC配置(附完整代码)

本文详细介绍了PCF8591芯片在STM32开发中的实战应用,涵盖IIC通信协议、ADC/DAC配置及完整代码实现。通过解析DATA SHEET关键参数,提供硬件连接指南、控制字节配置技巧和常见问题解决方案,帮助开发者快速掌握这款8位模数/数模转换器的使用,实现精确的模拟信号处理。

y7z8a的博客 539

springboot常用注解@Controller等注解的使用并从原理解析

springboot @RestController注解来控制处理Http请求 配合@RequestMapping 配置url映射使用。 1.@RestController注解是@Controller和@RequestBody的组合使用 @RestController public class HelloController { @RequestMapping(value="/hello...

java川 6881

华为od 面试八股文_前端_01_含答案

华为od 面试八股文_前端_01_含答案

MISAYAONE的博客 2748

系统安装(kuntaiR522 kvm安装)

鲲泰R522服务器kvm安装rocky

weixin_46396917的博客 1820

Spring Boot注解的运行原理

Spring Boot注解的运行原理

Smile的博客 2914

Linux系统中u-boot启动流程分析(详解)

代码部分,具体如下;

嵌入式技术开发 1991

Spring Boot 这么火,常用注解和原理都给你整理好了! 侵删

一、启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = {...

心神沫沫的收藏 109

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

requestbody注解_Spring Boot 这么火,常用注解和原理都给你整理好了!

一、启动注解 @SpringBootApplication@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @F...

weixin_39915171的博客 523

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

@controller注解_Spring Boot 这么火,常用注解和原理都给你整理好了!

作者: 云天https://www.cnblogs.com/tqlin/p/11687811.html一、启动注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAu...

weixin_40008969的博客 179

Spring Boot 常用注解面试题深度解析

Spring Boot 常用注解面试题深度解析

感谢阅读 5828

注解@controller的作用_Spring Boot常用注解和原理都给你整理好了!

一、启动注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Fi...

weixin_39725924的博客 1752

Spring Boot 常用注解和原理都给你整理好了!

一、启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = {...

坚持去坚持。 1723

componentscan注解的用法和作用_Spring Boot 这么火,常用注解和原理都给你整理好了...

作者:云天 链接:https://www.cnblogs.com/tqlin/p/11687811.html一、启动注解 @SpringBootApplication查看源码可发现,@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration`,@ComponentScan`这三个注解``@Sp...

weixin_39641257的博客 1025

Spring Boot 这么火,常用注解和原理都给你整理好了

作者:云天来源:http://39sd.cn/5E6F1一、启动注解 @SpringBootApplication@Target(ElementType.TYPE) @Retentio...

Java 架构师之路 204

SpringBoot常用注解整理

为甚禁止使用:1.在方法上增加@Transational声明式事务,如果方法上存在较多耗时操作,容易引发长事务的问题,长事务会带来锁的竞争影响性能,同时也会导致数据库的连接池会消耗尽,影响程序的正常执行;Springboot项目启动时,@SpringBootApplication用在启动类上,在springApplication.run()的内部就会执行selectImport()方法,找到所有JavaConfig自动配置类的的全限定名对应的class,然后将自动配置类加载到spring容器中。

weixin_46145080的博客 1560

Spring Boot常用注解和原理整理

一、启动注解 @SpringBootApplication @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = {...

Janson_Lin 284

【Spring】原理解析:Spring Boot 自动配置

在传统Spring开发中,手动配置@ComponentScan和@Import等注解来指定Bean扫描路径和导入配置类,虽然看似常规,但容易导致配置复杂、维护困难等问题。Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。这种自动配置机制通过元数据注解、条件表达式和上下文感知等方式精准识别并加载依赖中的Bean,显著提升了开发效率和代码可维护性。

2301_81073317的博客 7126

springboot常用注解整理与示例

Bean。

DKPT的博客 756
上一篇: 从理论到综合实例,终于弄懂了双工通讯协议websocket!
下一篇: 京东二面用JVM参数的这个坑,卡住了90%的人
Java思维导图
博客等级 码龄10年 306粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值