在本文中,我们将介绍一个非常有用的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 { ... }
总结
到此这篇关于使用Spring组合自定义的注释 mscharhag操作的文章就介绍到这了,更多相关spring 自定义注释内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
我正在尝试使用Spring安全注释,如@PreAuthorize和@安全,但我希望评估用户不是在一个角色上,而是他们是否拥有对特定实体的权限,在这种情况下是一家公司。在我的控制器中,我收到一个超文本传输协议请求,其中包含一个firmId作为参数,我想确保这个用户被允许进入这家公司。是否可以使用当前的Spring安全注释?。我正在寻找一个优雅的解决方案,我一直在寻找自定义约束验证器作为jsr303规
我发现了几个与此相关的(不是重复的)问题,但它们不能让我满意。 我无法理解在哪里以及为什么要使用? 我在一本书中读到了一个自定义注释的示例,但没有详细解释。 myMeth()内的输出与预期一致。 关于这个例子,我有几个问题。 1-如何在此程序中使用和?或
我在网上搜索了一个关于如何使用Spring AOP调用自定义方法注释的清晰示例,但没有找到一个清晰的示例。 我正在构建一个框架,以便在调用任何POJO上的某些方法时在上下文中注入用户配置文件。 框架API应该通过自定义方法注释调用,例如。我可以构建注释部分和解析器,我的问题是在调用带注释的方法时调用我的解析器的最佳方式是什么。 我们正在使用Spring 3.0,想知道配置Spring框架以理解那些
在我的Spring Boot项目中,我创建了一个自定义注释,其中validator扩展了ConstraintValidator,以验证RequestBody中的一些字段。注释对于非嵌套字段可以很好地工作,但对于嵌套字段不调用验证器。 我的注释如下所示: 我的验证类: 它在这样的情况下工作正常: 但是当放在嵌套对象上时,不会调用验证器: 类在我的中的用法: 关于如何解决这个问题有什么想法吗?我已经尝
问题内容: 我为我写了一个 对于每个我使用以下注释 因此,我决定定义自己的注释女巫,其中包含所有这样的注释 然后,我只用了一个注释 修改后,测试失败 为了使其再次工作,需要我将其添加到 我的问题是为什么我的注释包含注释时不起作用?注释有什么特别之处吗?还是我错过了什么? PS:我使用相同的方法,它们也很好用。 问题答案: 这种机制是Spring框架特有的,在这种机制中,您可以使用本身带有其他注释的