用Spring组成自定义注释

Java批注在2004年随Java 5一起引入,是一种将元数据添加到Java源代码中的方法。 如今,许多主要框架(如Spring或Hibernate)都严重依赖注释。

在本文中,我们将介绍一个非常有用的Spring功能,该功能允许我们基于一个或多个Spring注释创建自己的注释。

编写自定义注释

假设我们有一组经常一起使用的Spring注释。 一个常见的示例是@Service和@Transactional的组合:

 @Service  @Transactional (rollbackFor = Exception. class , timeout = 5 )  public class UserService { ...  } 

不必一遍又一遍地重复两个注释,我们可以创建包含这两个Spring注释的自己的注释。 创建我们自己的注释非常简单,如下所示:

 @Service  @Transactional (rollbackFor = Exception. class , timeout = 5 )  @Retention (RetentionPolicy.RUNTIME)  public @interface MyService {} 

注释是使用@interface关键字定义的(而不是类或接口)。 标准Java注释@Retention用于指示注释应在运行时可处理。 我们还将两个Spring注释都添加到了注释中。

现在,我们可以使用自己的@MyService批注来批注我们的服务:

 @MyService  public class UserService { ...  } 

Spring现在检测到@MyService被@Service和@Transactional注释,并提供与前面的示例相同的行为,并且在UserService类中存在两个注释。

请注意,这是Spring注释处理方式的功能,而不是一般的Java功能。 如果将其他框架和库的注释添加到自己的注释中,则它们可能无法正常工作。

用例范例

自定义注释可以在各种情况下使用,以提高代码的可读性。 这是另外两个可能派上用场的例子。

也许我们在代码的各个位置都需要一个属性值。 通常使用Spring的@Value注释注入属性:

 // injects configuration properties my.api.key  @Value ( "${my.api.key}" )  private String apiKey; 

在这种情况下,我们可以将属性表达式从代码中移到单独的注释中:

 @Value ( "${my.api.key}" )  @Retention (RetentionPolicy.RUNTIME)  public @interface ApiKey {} 

现在,在我们的代码中,我们可以使用@ApiKey而不是在各处重复属性表达式:

 @ApiKey  private String apiKey; 

另一个例子是集成测试。 在测试中,通常使用各种Spring批注来定义测试设置。 可以使用自定义注释将这些注释分组在一起。 例如,我们可以创建一个@MockMvcTest注释,该注释定义模拟mvc测试的Spring设置:

 @SpringBootTest  @AutoConfigureMockMvc (secure = false )  @TestPropertySource (locations = "classpath:test.properties" )  @ExtendWith (SpringExtension. class )  @Retention (RetentionPolicy.RUNTIME)  public @interface MockMvcTest {} 

现在,我们的测试定义看起来更加清晰。 我们只需要添加@MockMvcTest即可获得完整的测试设置:

 @MockMvcTest  public class MyTest { ...  } 

请注意,我们的@MockMvcTest批注还包含JUnit 5的@ExtendWith批注。与Spring一样,如果将其添加到您自己的自定义批注中,JUnit 5也能够检测到此批注。 请注意,如果仍在使用JUnit 4,这将无法正常工作。对于JUnit 4,您必须使用@RunWith而不是@ExtendWith。 不幸的是,@RunWith仅在直接放在测试类中时才起作用。

春天的例子

Spring在各种情况下都使用此功能来定义常用注释的快捷方式。

这里有一些例子:

  • @GetMapping是@RequestMapping的简短版本(方法= {RequestMethod.GET})。
  • @RestController是@Controller和@ResponseBody的组合。
  • @SpringBootApplication是@ SpringBootConfiguration,@ EnableAutoConfiguration和@ComponentScan的快捷方式

您可以通过查看Spring源代码中这些注释的定义来自己验证。

翻译自: https://www.javacodegeeks.com/2020/02/composing-custom-annotations-with-spring.html

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

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

相关文章

单片机sleep函数的头文件_单片机代码模块化设计思想浅谈

前言:前段时间分享的文章【单片机裸机代码框架设计思路】,很多读者给我留言,觉得很不错,对于初学者而言,这是一个进阶的技巧,对于我而言,这是对自己总结和表达能力的一个提升。本文章我们再谈谈…

html中显示数据库中的一条数据,如何使用html表显示数据库中的数据

我正在尝试在HTML表中显示数据库中的数据。主要问题是:该表未出现。IdStringArray// Mostrar dadosecho "{$databaseName visteon;$pdo new Pdo(mysql:host127.0.0.1;dbname . $databaseName, root, );$result $pdo->query(SHOW TABLES FROM . $databas…

jquery 字符串查找_JQuery、Vue等考点

一. 写出下面程序的运行结果for结果:1秒后一下子打印出5个5。当循环完成时才会轮到setTimeout异步执行其回调函数function,此时i已经变成5,故5个console.log(i)里的i全使用的是5。易错点:千万别写成“打印5个4”啊!暴风…

html网页效果分析,熟手的html编写风格与原因分析_HTML/Xhtml_网页制作

一、导航:无序列表 对 其它标签元素用最常用的“无序列表“来写导航的理由是显而易见的,它代表一列链接,这本身就有足够的理由应选择列表标签。但需要移除list列表的默认样式,以使其更有意义。另一个好处可能超出你的想象&#xf…

qgis 图片_QGIS入门教程公告!!!

从本周开始,我将每周日更新一期QGIS入门教程视频,带讲解,估计这也是很多朋友所希望的。操作中用到的数据下载链接我会放在每一期的视频下方。以下是入门课程的目录:1.开启你的QGIS之旅——制作你的第一张地图2.属性表基础——字段…

v-if 表单验证_避免许多if块进行验证检查

v-if 表单验证在某些情况下,我们需要先验证输入数据,然后再将其发送到业务逻辑层进行处理,计算等。这种验证在大多数情况下是孤立进行的,或者可能包括与外部数据或其他输入的一些交叉检查。 看下面的示例,该示例验证用…

css less 不要作用到子对象_CSS-预处理语言Sass、Less简述

CSS作为前端开发的三驾马车之一,无时无刻不在影响着前端的发展。为了让 CSS 变得更加的好用,出现了一些预处理语言。 它们让 CSS 彻底变成一门可以使用变量 、循环 、继承 、自定义方法等多种特性的标记语言,逻辑性得以大大增强SassSass是成熟…

html图片平铺div,前端小知识——图片平铺问题

图片平铺有两种方式,直接写img标签或者通过background-image方式1,img标签HTML:CSS:.row{margin:0,auto;width:100%;}img{width:100%;height:100%;margin: 0 auto;display: block;font-size: 0;}这样写的话,三张图片能够垂直平铺&…

JMetro版本11.6.8和8.6.8发布

另一个版本,这次是较短的更新。 撰写文档和博客文章有点不知所措,但是我认为我不得不更新文档,因为它已经被更新了大约一年或更长时间。 因此,对于此发行版,我也专注于此。 这是链接: Javafx主题JMetro页面…

python用pip安装numpy mac_小白入门Python,mac下如何安装pip、ipython

作为一枚小白,最近在学习用Python写科学计算器,因为Mac不自带pip,安装的时候找了好几个帖子,才成功安装。做一下简单分享,希望对大家有帮助: 安装环境: Mac系统版本:OS X 10.11.1 Py…

js 点击侧边栏展示内容_上海SEO优化网站侧边栏一般添加什么内容

相关推荐:https://www.huisheng.com/上海SEO优化网站侧边栏一般添加什么内容?企业做网站每个板块都是非常重要的,之前跟大家解析了关于导航栏的布局,哪些内容该添加,哪些内容不该添加,而今天小编要跟大家解…

html网页设如何置访问密码,利用JS给单页html加上简单访问密码,需要密码才能访问!...

本文最后更新于【 2019-12-21 22:28:00 】,某些文章具有时效性,若有错误或已失效,请在下方 留言 或联系 小P君 。今天在搞一个简单的短域名生成网页的时候,以防被滥用,所以想给html加一个简单的密码,需要…

python装饰器作用噜咕_python 装饰器的实际作用有哪些

终于知道python的装饰器是怎么回事,那在工作中,到底能干吗用呢? 尤其对我这个只会写写脚本又不做python开发的小测试/手动无辜脸。 先说结论,肯定是有用处滴。 一、自动化测试中使用 就拿写的自动化测试来说吧,如果我想…

机器人辅助的符文天赋_10.5版本T1辅助盘点 进攻型辅助主宰下路

摘要:今天为大家推荐10.5版本的三大T1辅助,在当前版本每层塔钱增加到160后,这些前期进攻性较强的辅助更容易上分,他们都有直接或间接击毁镀层的能力,赛娜推线压制后的远程点塔,机器人靠着钩子的威胁上前、日…

html5新变化,HTML5的新变化,分享

1、新的2、图形元素 figure ,将与相结合,使图片标题与图片相搭配%3、不需要为链接和脚本标签添加类型的属性4、h5中不需要用引号将属性包裹起来5、使得内容可编辑。”contenteditable”,它将允许用户编辑元素(包括他的子元素)内包含的任何文本…

javafx属性_JavaFX技巧11:更新只读属性

javafx属性自定义控件通常具有“只读”属性。 这意味着不能从控件外部进行设置,甚至不能从自己的皮肤类别进行设置。 通常,控件的行为会导致更改只读属性。 在JavaFX中,此行为可以在控件本身和皮肤中实现。 因此,有时我们最终希望…

dataframe 选择输出_使用 Python 实现机器学习特征选择的 4 种方法

(给数据分析与开发加星标,提升数据技能)英文:Sugandha Lahoti,转自:数据派(ID:datapi),翻译:李洁注:本文节选自Ankit Dixit所著的《集成机器学习》(Ensemble Machine Learning)一书。…

ps一点等于多少厘米_企业展厅设计关于展台你了解多少?

发 现 生 活 中 最 美 好 的 设 计打开音乐聆听设计伽的声音水北展陈今日份文章:企业展厅设计关于展台你了解多少?企业展厅设计展台是各种展品、实物、模型以及沙盘的展示介质之一。企业展厅设计展台的设计和选用要从企业展厅设计展品的特征出…

计算机应用能力文字录入,2017全国专业技术人员计算机应用能力考试题库-Excel,Word,XP.pdf...

《博大考神》2006版之excel2003题库版3一、Excel的应用基础3二、excel界面4三、数据的输入6四、插入对象8五、编辑工作表9六、创建公式11七、使用函数和主要函数12八、普通函数13九、工作表的格式设置(一)14十、工作表的格式设置(二)15十一、打印16十二、管理工作表和保护数据1…

用python turtle库画正方形_用Python Turtle画一个正方形

你的主要错误是这两行顺序错误:window.exitonclick() #click the screen to close it draw_square() exitonclick(),或mainloop(),或done()应该是最灵活的,针对上述和样式问题,你的代码需要重新编写:import…