Spring中常见的注解

news/发布时间2024/6/8 11:23:20

1 spring注解介绍
Spring Framework是一个开源的Java平台,广泛用于创建高性能的企业应用程序。随着Spring的发展,注解(Annotation)已经成为了配置Spring应用程序的主要方式,逐渐取代了传统的XML配置。使用注解可以使代码更加简洁明了,提高开发效率和可读性。

Spring的注解驱动的编程模型大大简化了Java企业应用的开发。通过减少配置的复杂性,提高代码的清晰度和模块化,Spring注解使得开发者可以更加专注于业务逻辑的实现。随着Spring框架的不断演进,注解的使用变得越来越灵活和强大,为构建现代Java应用程序提供了强有力的支持。

1.1 核心注解
1.1.1 @SpringBootApplication
这是一个组合注解,标记在应用的主类上。它结合了以下三个注解的功能:

@Configuration:标记一个类作为bean定义的源。
@EnableAutoConfiguration:启用Spring Boot的自动配置机制。
@ComponentScan:启用@Component注解的扫描。
1.1.2 @Component
这是一个泛化的注解,用于定义Spring管理的组件。它表明一个类会作为组件类,并告诉Spring要为这个类创建bean。

1.1.3 @Repository
在DAO层(数据访问层)使用,标记一个类作为数据访问对象。

1.1.4 @Service
在服务层使用,标记一个类作为服务类。

1.1.5 @Controller
在表现层使用,标记一个类作为Spring MVC控制器。

1.1.6 @RestController
结合了@Controller和@ResponseBody的功能,用于创建RESTful Web服务。

1.1.7 @RequestMapping & @GetMapping/@PostMapping/@PutMapping/@DeleteMapping
这些注解用于处理Web请求。@RequestMapping是一个通用的请求处理注解,而其他注解是它的特化版本,用于处理HTTP中的GET、POST、PUT和DELETE请求。

1.1.8 @Autowired
用于自动注入Spring容器中的bean。可以用于变量、方法和构造函数上。

1.1.9 @Qualifier
与@Autowired一起使用,当有多个同类型的bean时,用于指定要注入的bean。

1.1.10 @Bean
在方法上使用,表明这个方法将返回一个对象,该对象要注册为Spring应用程序上下文中的bean。

1.2 配置和管理
1.2.1 Java配置类
使用注解配置时,通常会有一个或多个带有@Configuration注解的Java类,它们定义了应用程序上下文中的bean。

1.2.2 依赖注入
@Autowired注解用于实现依赖注入。Spring容器会在创建bean时自动注入所需的依赖。

1.2.3 条件化的Bean创建
可以使用@Conditional注解(或其特化形式如@ConditionalOnClass、@ConditionalOnBean)来根据特定条件创建beans。

1.3 AOP和事务管理
1.3.1 @Aspect
在类上使用,将其标记为切面类。

1.3.2 @Before、@After、@Around
这些注解用于定义通知(Advice),是AOP(面向切面编程)的关键部分。

1.3.3 @Transactional
声明事务的范围和行为。可以用于类或方法级别。

1.4 测试支持
1.4.1 @SpringBootTest
用于Spring Boot应用程序的集成测试,可以启动一个嵌入式的Spring应用程序上下文。

1.4.2 @DataJpaTest、@WebMvcTest等
用于更细粒度的测试配置,专门测试JPA仓库、Spring MVC控制器等。

1.4.3 @MockBean 和 @SpyBean
用于在Spring Boot测试中添加和配置mock对象。

1.5 实用注解
1.5.1 @Value
用于注入属性文件中的值。

1.5.2 @Profile
指定某个bean只在特定的配置文件激活时才创建。

1.5.3 @PropertySource
指定用于填充环境属性的属性文件。

1.5.3 @Scope
定义bean的作用域,如singleton、prototype等。

2 Spring注解详解
2.1 bean factory注解
@Configuration      
把一个类作为一个IoC容器,可理解为用xml里的<beans>标签

@ComponentScan
启用类扫描,与xml中<context:component-scan>作用一致@ComponentScans

@Conditional
根据满足某个特定的条件创建一个特定的Bean

@Bean                  
告诉被注释的方法产生一个Bean,然后交给Spring容器,用在方法上,告诉Spring容器可以从这个方法中拿到一个Bean

@Lazy                   
用于指定该Bean是否取消预初始化。主要用于修饰Spring Bean类,用于指定该Bean的预初始化行为

@DependsOn         
用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean

@Import                 
支持导入配置类,也支持导入普通的java类,并将其声明成一个bean

@ImportResource、@Value
用来进行资源文件的读取

@Primary               
在众多相同的bean中,优先使用用@Primary注解的bean

@Qualifier              
指定某个bean有没有资格进行注入

@Profile               
标注的组件只有当指定profile值匹配时才生效,可以通过以下方式设置profile值:

(1)设置spring.profiles.active属性(通过JVM参数、环境变量或者web.xml中的Servlet context参数)

(2)ApplicationContext.getEnvironment().setActiveProfiles(“ProfileName”)根据实际环境设置profile值,然后被profile标注(而且value=设置值)的bean才会被注册到spring容器

@Scope               
默认是单例模式,即scope="singleton"

singleton单例模式:全局有且仅有一个实例

prototype原型模式:每次获取Bean的时候会有一个新的实例

request:equest表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效

session:session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前

HTTP session内有效

global session:作用域类似于标准的HTTP Session作用域,仅仅在基于portlet的web应用中才有意义。

@PropertySource        
读取properties文件

@Autowired           
它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除set ,get方法

@Required               
适用于bean属性的setter方法并且它指示,受影响的bean属性必须在配置时被填充在XML配置文件中,否则容器将抛出BeanInitializationException例外

@Order                  
在spring 4.0之前,@Order标记只支持AspectJ的切面排序。spring 4.0对@Order做了增强,它开始支持对装载在诸如Lists和Arrays容器中的自动包装(auto-wired)组件的排序

@AliasFor               
给注解的属性起别名,让使用注解时,更加的容易理解

@Component          
这是一个元注解,意思是它可以用于标注其他注解,被它标注的注解和它起到相同或者类似的作用

2.2 Spring mvc注解
@Controller            
用于标注控制层组件

@Service                
用于标注业务层组件

@Respository          
用于标注数据层组件DAO

@ControllerAdvice    
通过@ControllerAdvice。我们可以将对于控制器的全局配置放置在同一个位置,注解

了@ControllerAdvice的类的方法可以使用@ExceptionHandler,@InitBinder,@ModelAttribute注解到方法上,这对所有注解了@RequestMapping的控制器内的方法有效。

@ExceptionHandler:
用于全局处理控制器里面的异常。

@InitBinder:
用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。

@ModelAttribute
本来的作用是绑定键值对到Model里,此处是让全局的@RequestMapping都能获得在此处设置的键值对。

@InitBinder             
用于在@Controller中标注于方法,表示为当前控制器注册一个属性编辑器或者其他,只对当前的Controller有效

@ModelAttribute       
两种应用场景:运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;运用在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中;

@MatrixVariable       
在传递path相关的参数是使用,利用MatrixVariable可以动态传递参照的元素id

@RequestMapping    
用来处理请求地址映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径

@RequestParam       
用来处理请求参数映射 @RequestPart 用来处理文件上传 @RequestBody 对应的POST请求的body,body即是获取的参数,如果想通过参数去获取,则要使用@RequestParams

@RequestHeader      
用于映射控制器参数以请求头值的注释

@RequestAttribute    
用于访问由过滤器或拦截器创建的、预先存在的请求属性

@SessionAttribute     
用于访问预先存在的全局会话属性 @CookieValue用来获取Cookie中的值

@ExceptionHandler   
对web的服务器端运行错误, 做统一的处理

@CrossOrigin           
跨域注解

@GetMapping          
简化常用的HTTP方法的映射,是@RequestMapping(method = RequestMethod.GET)的缩写

@PostMapping         
组合注解,简化常用的HTTP方法的映射

@PutMapping           
组合注解,简化常用的HTTP方法的映射

@DeleteMapping       
组合注解,简化常用的HTTP方法的映射

@PatchMapping        
组合注解,简化常用的HTTP方法的映射

@RestController        
标识类作为控制器,每一个方法返回域对象pojo代替一个视图

@RestControllerAdvice
一个组件注解,异常统一处理

@ResponseBody       
内容或对象作为 HTTP 响应正文返回,并调用适合HttpMessageConverter的Adapter转换对象,写入输出流@ResponseStatus       用于修饰一个类或者一个方法,修饰一个类的时候,一般修饰的是一个异常类@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中

@Validated                
是@Valid 的一次封装,是Spring提供的校验机制使用

@EnableWebMvc           
启用spring mvc

JSR-250

@PostConstruct          
注解的方法将会在依赖注入完成后被自动调用,顺序Constructor >> @Autowired >> @PostConstruct

@PreDestroy               
销毁之前调用方法@Resource 注解被用来激活一个命名资源(named resource)的依赖注入

JSR-330

@Inject                      
可以注入对象,在属性域上面注入、在set方法或者其他需要注入的方法上面注入、在构造器上面注入@Inject没有@required标签,强制要求对象不能为空

@Named                    
可以有值,如果没有值生成的Bean名称默认和类名相同

     
@Max    
校验最大值

@Min                
校验最小值

@NotNull                    
校验不能为空

@Size                         
校验长度

@Pattern                     
正则校验

@Valid                        
标识校验bean,要紧挨着JavaBean,要不然不会生效的

2.3 数据处理层注解
@EnableTransactionManagement            
激活事务管理@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类

上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别

使用该标注来覆盖类级别的定义

@EnableAspectJAutoProxy                      
激活Aspect自动代理

@EnableCaching                                    
激活数据缓存

@CacheConfig                                      
在类级别上统一定义缓存名称

@Cacheable                                         
主要针对方法配置,能够根据方法的请求参数对其结果进行缓存

@Caching                                            
对于@Caching注解来讲,如果有两种不同的需求,都是放在同一个方法上,这种需求如果

只是使用@CacheEvict或者@CachePut是无法实现,因为他们不能多样化的作用在同一个

方法上。可以使用@Caching(evict={@CacheEvict(“a1”),@CacheEvict(“a2”,allEntries=true)})

@CachePut                                          
主要针对方法配置,能够根据方法的请求传输对其结果进行缓存,和@Cacheable不同的

是,它每次都会触发真实的方法调用

@CacheEvict                                        
主要针对方法配置,能够根据一定的条件对缓存进行清空

Bean Validation 中内置的 constraint

@Null                           被注释的元素必须为 null    

@NotNull                      被注释的元素必须不为 null     

@AssertTrue                 被注释的元素必须为 true    

@AssertFalse                被注释的元素必须为 false     

@Min(value)                  被注释的元素必须是一个数字,其值必须大于等于指定的最小值    

@Max(value)                 被注释的元素必须是一个数字,其值必须小于等于指定的最大值     

@DecimalMin(value)       被注释的元素必须是一个数字,其值必须大于等于指定的最小值    

@DecimalMax(value)      被注释的元素必须是一个数字,其值必须小于等于指定的最大值     

@Size(max=, min=)        被注释的元素的大小必须在指定的范围内    

@Digits (integer, fraction)    被注释的元素必须是一个数字,其值必须在可接受的范围内     

@Past                          被注释的元素必须是一个过去的日期    

@Future                       被注释的元素必须是一个将来的日期     

@Pattern(regex=,flag=)   被注释的元素必须符合指定的正则表达式    

Hibernate Validator 附加的 constraint     

@NotBlank(message =)    验证字符串非null,且长度必须大于0    

@Email                          被注释的元素必须是电子邮箱地址     

@Length(min=,max=)       被注释的字符串的大小必须在指定的范围内    

@NotEmpty                    被注释的字符串的必须非空     

@Range(min=,max=,message=)   被注释的元素必须在合适的范围内

MyBatis

@Param 映射参数注解@Select 查询注解@Update 更新注解@Delete 删除注解@Insert 插入注解@Results 结果注解@Result 结果注解@Options 选项注解

2.4 切面注解@Aspect 声明一个切面
@After                         注解切入时机为执行完成
@AfterReturning                注解切入时机为执行返回
@AfterThrowing                 注解切入时机为抛出异常
@Around                        注解切入时机为环绕
@Before                        注解切入时机为开始调用
@DeclareParents                注解引入新的方法
@Pointcut                      定义切点
2.5 任务处理注解
@EnableAsync                   开启多线程,可以标注在方法、类上
@Async                         异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作
@EnableScheduling              开启对计划任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务
@Scheduled                     声明这是一个计划任务
@Schedules

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/KJkO/1307.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

9、使用 ChatGPT 的 GPT 制作自己的 GPT!

使用 ChatGPT 的 GPT 制作自己的 GPT! 想用自己的 GPT 超越 GPT ChatGPT 吗?那么让我们 GPT GPT 吧! 山姆 奥特曼利用这个机会在推特上宣传 GPTs 的同时还猛烈抨击了埃隆的格罗克。 GPTs概览 他们来了! 在上周刚刚宣布之后,OpenAI 现在推出了其雄心勃勃的新 ChatGPT…

开源数据可视化应用程序JSON Crack

什么是 JSON Crack &#xff1f; JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互式图表。凭借其直观且用户友好的界面&#xff0c;JSON Crack 可以轻松探索、分析和理解即使是最复杂的数据结构。无论您是从事大…

数据结构--排序

数据结构--排序 1. 各类排序算法的性质2. 插入排序2.1 直接插入排序2.2 折半插入排序 3. 希尔排序4. 交换排序4.2 冒泡排序 5. 快速排序6. 选择排序6.1 简单选择排序6.2 堆排序 7. 归并排序8. 基数排序 1. 各类排序算法的性质 2. 插入排序 2.1 直接插入排序 2.2 折半插入排序 …

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息

openai公司的chatgpt-3.5参数库内还未增加sora的语料信息&#xff01;我想通过openai公司的chatgpt3.5来了解一下关于sora的技术信息&#xff0c;结果呢&#xff0c;它竟然回答不知道sora是什么。看来&#xff0c;sora的语料库信息还未来得及加入chatgpt3.5的训练模型中。 如图…

vue的十大面试题详情

1 v-show与v-if区别 v-if与v-show可以根据条件的结果,来决定是否显示指定内容&#xff1a; v-if: 条件不满足时, 元素不会存在. v-show: 条件不满足时, 元素不会显示(但仍然存在). <div id"app"><button click"show !show">点我</but…

计算机视觉基础【OpenCV轻松入门】:获取图像的ROI

OpenCV的基础是处理图像&#xff0c;而图像的基础是矩阵。 因此&#xff0c;如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作&#xff0c;从而更好地实现对图像的处理。 ROI&#xff08;Region of Interest&#xff09;是…

【Spring】循环依赖

目录标题 什么是循环依赖循环依赖场景Java SE 演示Spring 容器演示三级缓存核心知识三级缓存四大方法三级缓存中的迁移 三级缓存源码分析源码思维导图 源码图例课前问题推荐阅读 循环依赖是什么&#xff1f;循环依赖的场景有哪一些&#xff1f;三级缓存分别是什么&#xff1f;三…

HarmonyOS4.0系统性深入开发34栅格布局(GridRow/GridCol)

栅格布局&#xff08;GridRow/GridCol&#xff09; 概述 栅格布局是一种通用的辅助定位工具&#xff0c;对移动设备的界面设计有较好的借鉴作用。主要优势包括&#xff1a; 提供可循的规律&#xff1a;栅格布局可以为布局提供规律性的结构&#xff0c;解决多尺寸多设备的动态…

HarmonyOS4.0系列——08、整合UI常用组件

HarmonyOS4.0 系列——08、UI 组件 Blank Blank 组件在横竖屏占满空余空间效果 // xxx.ets Entry Component struct BlankExample {build() {Column() {Row() {Text(Button).fontSize(18)Blank()Toggle({type: ToggleType.Switch}).margin({top: 14,bottom: 14,left: 6,righ…

多线程相关(1)

线程调度 线程状态&#xff1a;状态切换阻塞与唤醒阻塞唤醒 wait 与 sleep创建线程方式 线程是cpu任务调度的最小执行单位&#xff0c;每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈。 线程状态&#xff1a; 线程状态包括&#xff1a;创建、就绪、运行、阻塞、死亡…

ipad作为扩展屏的最简单方式(仅需在同一局域网下,无需数据线)

ipad和win都下载安装toDesk&#xff0c;并且都处于同一局域网下 连接ipad&#xff0c;在ipad中输入win设备的设备密码和临时密码&#xff0c;连接上后可以看到ipad会是win屏幕的镜像&#xff0c;此时退出连接&#xff0c;准备以扩展模式再次连接。 注意&#xff0c;如果直接从…

Java 正则表达式 Pattern类和Matcher类

java.util.regex包主要包括三个类&#xff1a; PatternMatcherPatternSyntaxExcepiton Pattern类 Pattern对象是一个正则表达式对象。Pattern类没有公共的构造方法。要创建一个Pattern对象&#xff0c;需要调用其公共静态方法。该方法接收一个正则表达式作为它的第一个参数。…

七、MyBatis-Plus高级用法:最优化持久层开发

目录 一、MyBatis-Plus快速入门 1.1 简介 1.2 快速入门 二、MyBatis-Plus核心功能 2.1 基于Mapper接口CRUD Insert方法 Delete方法 Update方法 Select方法 自定义和多表映射 2.2 基于Service接口CRUD 对比Mapper接口CRUD区别&#xff1a; 使用Iservice接口方式 CRUD方…

[嵌入式系统-32]:RT-Thread -17- 任务、进程、线程的区别

目录 一、基本概念澄清 1.1 任务 1.2 进程 1.3 线程 1.4 比较 1.5 任务VS进程 1.6 进程 VS 线程 1.7 任务 进程 线程 发展历史 任务&#xff08;Task&#xff09;&#xff1a; 进程&#xff08;Process&#xff09;&#xff1a; 线程&#xff08;Thread&#xff09;…

MAC VSCODE g++编译器无法编译C++11语法的 解决办法(CodeRunner版本)

如果你是使用的 codeRunner 这个插件&#xff0c;就是这个按钮 coderunner的原理大致是&#xff1a;先判断你这是什么语言&#xff0c;然后有一个 code-runner.executorMap 来对应各个语言是用什么执行语句 我发现&#xff0c;我修改之前&#xff08;无法执行C11语法的原因是&a…

SQL笔记-多表查询(合并记录新增字段)

比如要统计2张表的所有数据&#xff0c;这两张表无关联关系&#xff0c;统计的数据需要在同一行&#xff1a; SELECT (SELECT COUNT(*) FROM reptile_csdn_article) AS table1_count, (SELECT COUNT(*) FROM reptile_tag_type) AS table2_count 运行截图如下&#xff1a; 大于…

Flink join详解

Flink SQL支持对动态表进行复杂而灵活的连接操作。 为了处理不同的场景&#xff0c;需要多种查询语义&#xff0c;因此有几种不同类型的 Join。 默认情况下&#xff0c;joins 的顺序是没有优化的。表的 join 顺序是在 FROM 从句指定的。可以通过把更新频率最低的表放在第一个、…

PyCharm - Script parameters (脚本参数)

PyCharm - Script parameters [脚本参数] References Run -> Edit Configurations… -> Run/Debug Configurations -> Configuration -> Script parameters 命令行&#xff1a; python display_yolo_log.py ./person_training_log/person_train_log_DIMM40_stdout…

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练&#xff0c;今…

adb-环境安装

1. 下载解压包&#xff1a;百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固&#xff0c;支持教育网加速&#xff0c;支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1TDu2fzGbqCyug3wCSmV9oQ?pwd…
推荐文章