使用Spring组合自定义的注释 mscharhag操作
作者:banq 发布时间:2023-02-14 11:18:01
在本文中,我们将介绍一个非常有用的Spring功能,该功能允许我们基于一个或多个Spring注释创建自己的注释。
假设我们有一组经常一起使用的Spring注释。一个常见的示例是@Service和@Transactional的组合:
@Service
@Transactional(rollbackFor = Exception.<b>class</b>, timeout = 5)
<b>public</b> <b>class</b> UserService {
...
}
如果希望在所有服务类上用这两个注释,现在不必一遍又一遍地重复注释了,我们可以创建一个新注释包含这两个注释。创建我们自己的注释非常简单,如下所示:
@Service
@Transactional(rollbackFor = Exception.<b>class</b>, timeout = 5)
@Retention(RetentionPolicy.RUNTIME)
<b>public</b> @<b>interface</b> MyService {}
注释是使用@interface关键字定义的(而不是类或接口)。标准Java注释@Retention用于指示注释应在运行时可处理。我们还将两个Spring注释都添加到了注释中。
现在,我们可以使用自己的@MyService批注来批注我们的服务:
@MyService
<b>public</b> <b>class</b> UserService {
...
}
Spring现在检测到@MyService被@Service和@Transactional注释,并提供与前面的示例UserService相同的行为。
请注意,这是Spring注释处理方式的功能,而不是一般的Java功能。
自定义注释可以在各种情况下使用,以提高代码的可读性。这是另外两个可能派上用场的例子。
也许我们在代码的各个位置都需要一个属性值。通常使用Spring的@Value注释注入属性:
<font><i>// injects configuration properties my.api.key</i></font><font>
@Value(</font><font>"${my.api.key}"</font><font>)
<b>private</b> String apiKey;
</font>
在这种情况下,我们可以将属性表达式从代码中移到单独的注释中:
@Value(<font>"${my.api.key}"</font><font>)
@Retention(RetentionPolicy.RUNTIME)
<b>public</b> @<b>interface</b> ApiKey {}
</font>
现在,在我们的代码中,我们可以使用@ApiKey而不是在各处重复属性表达式:
@ApiKey
<b>private</b> String apiKey;
另一个例子是集成测试。在测试中,通常使用各种Spring批注来定义测试设置。可以使用自定义注释将这些注释分组在一起。例如,我们可以创建一个@MockMvcTest注释,该注释定义模拟mvc测试的Spring设置:
@SpringBootTest
@AutoConfigureMockMvc(secure = false)
@TestPropertySource(locations = <font>"classpath:test.properties"</font><font>)
@ExtendWith(SpringExtension.<b>class</b>)
@Retention(RetentionPolicy.RUNTIME)
<b>public</b> @<b>interface</b> MockMvcTest {}
</font>
现在,我们的测试定义看起来更加清晰。我们只需要添加@MockMvcTest即可获得完整的测试设置:
@MockMvcTest
<b>public</b> <b>class</b> MyTest {
...
}
来源:https://www.jdon.com/53851


猜你喜欢
- 一般情况下在Word中输入的文字都是横向的,今天给大家分享两种方法来设置/更改一个section内的所有文本的方向及部分文本的方向,有兴趣的
- 本文中使用maven+eclipse搭建activiti-5.14的开发环境一、创建maven工程创建一个普通的java工程,pom文件的内
- 说起EventTrigger事件触发器,它的使用可以说是无处不在,EventTrigger继承了很多的事件接口,这些接口对我们开发是十分有用
- TypeScript简介:TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语
- 实现方案:我们直接参考实例代码:private String pattern = "((http|ftp
- 需求:将 一个容器List<Bean> 按照一定的字段进行分组,分组过后的值为特定的BEAN 里面的属性例如:假定有这样一个Be
- 本文实例为大家分享了C#实现简单打字小游戏的具体代码,供大家参考,具体内容如下using System;using System.Colle
- 本文实例为大家分享了Android实现支付宝记账饼图,点击旋转到最下面,供大家参考,具体内容如下代码:package com.example
- 本文研究的主要是优化MyBatis配置文件中的配置的相关内容,具体介绍如下。一、连接数据库的配置单独放在一个properties文件中之前,
- 测试环境为Adnroid 2.1以上。 1.AndroidManifest.xml 权限配置: 添加互联网访问权限: <uses-pe
- 目录通过切面,实现超灵活的注解式数据校验Spring MVC的校验方式通过切面实现自己的注解式数据校验Spring boot aop注解数据
- 本文实例为大家分享了java实现马踏棋盘的具体代码,供大家参考,具体内容如下马踏棋盘算法介绍8X8棋盘,马走日字,要求每个方格只进入一次,走
- @Transactional 内部调用例子 🌰在 Spring 的 AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成
- 求一个n阶行列式,一个比较简单的方法就是使用全排列的方法,那么简述以下全排列算法的递归实现。首先举一个简单的例子说明算法的原理,既然是递归,
- 本文实例讲述了Android开发中应用程序分享功能。分享给大家供大家参考,具体如下:Intent shareIntent = new Int
- 双亲委派模型类加载这个概念应该算是Java语言的一种创新,目的是为了将类的加载过程与虚拟机解耦,达到”通过类的全限定名来获取描述此类的二进制
- Strut2判断是否是AJAX调用1. AJAX与传统Form表单实际上,两者一般都是通过HTTP的POST请求。区
- sql中like通配符模糊匹配问题针对oracle数据库:将查询条件通过功能类处理/** * Desc
- 详解path和classpath的区别path的作用path是系统用来指定可执行文件的完整路径,即使不在path中设置JDK的路径也可执行J
- AbstractAutowireCapableBeanFactory#applyMergedBeanDefinitionPostProces