门户网站自查报告,wordpress主题模板 教育,广州小程序开发的公司排名,线上渠道推广有哪些方式spring使用自定义注解Java批注在2004年随Java 5一起引入#xff0c;是一种将元数据添加到Java源代码中的方法。 如今#xff0c;许多主要框架#xff08;如Spring或Hibernate#xff09;都严重依赖注释。 在本文中#xff0c;我们将介绍一个非常有用的Spring功能#xf… 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.htmlspring使用自定义注解