Spring4.0系列4-Meta Annotation(元注解)
系列 注解 Meta annotation
2023-09-14 08:59:46 时间
spring框架自2.0开始添加注解的支持,之后的每个版本都增加了更多的注解支持。注解为依赖注入,AOP(如事务)提供了更强大和简便的方式。这也导致你要是用一个相同的注解到许多不同的类中去。这篇文章介绍meta annotation来解决这个问题。
Meta Annotation(元注解)定义Spring4.0的许多注解都可以用作meta annotation(元注解)。元注解是一种使用在别的注解上的注解。这意味着我们可以使用Spring的注解组合成一个我们自己的注解。
创建组合注解自定义注解或组合注解是从其他的Spring元注解创建的。这种注解分为两类:
1、只是为了编码简单将多个注解组合成一个注解; 2、可以定义一个可复用的注解,这个注解可以解决问题,但是不用记住所有单独的注解。
import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Repository @Scope("prototype") @Transactional(propagation = Propagation.REQUIRES_NEW, timeout = 30, isolation=Isolation.SERIALIZABLE) public class OrderDaoImpl implements OrderDao { ...
没有任何的业务代码,但是类上注解的申明就让代码有10几行之多。为了简化DAO,我们提供一个组合DAO注解,使用Spring元注解来自定义一个注解。
import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Repository @Scope("prototype") @Transactional(propagation = Propagation.REQUIRES_NEW, timeout = 30, isolation=Isolation.SERIALIZABLE) public @interface MyDao {
注解的属性
大部分情况下,注解是需要属性的。自定义的注解也可以提供属性。比如:@Repositoy可以提供一个name属性。
由于自定义的@MyDao可能被很多DAO使用,所以对@Repository的name硬编码是不行的。所以我们简单的添加一个value属性到@MyDao上(和@Repository中的相同的value属性)。
@Scope("prototype") @Transactional(propagation = Propagation.REQUIRES_NEW, timeout = 30, isolation=Isolation.SERIALIZABLE) public @interface MyDao { String value();
Spring的meta标签 Spring的解析源码 public void parseMetaElements(Element ele, BeanMetadataAttributeAccessor attributeAccessor) { //获取当前节点的所有子元素 NodeList nl = ele.
《Spring Boot 2.5开发实战》电子版地址 本书全面覆盖了 Spring Boot 2.5 新特性、自动化配置原理、如何开发 REST API、 实战 MySQL 数据库、Redis 高并发缓存、MongoDB 数据库、MQ 消息队列、安全机制、 性能监控、高级面试题等热门知识点。
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载
相关文章
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)
- Spring注解系列——@PropertySource
- 网页优化系列一:合并文件请求(asp.net版)
- R语言系列:生成数据
- 【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块
- Jerry Wang的SAP UI5源代码深入剖析系列文章
- Atitti 类库 开发者 常用 api 目录 1.1. Meta anno注解元数据api1 1.2. Ref 反射api1 1.3. Database meta api1 1.4.
- 玩转华为ENSP模拟器系列 | 配置基于iBGP的PE和接入设备间路由交换
- Kubernetes基础自学系列 | 调度器
- 微服务Consul系列之服务注册与服务发现
- 【牛客网刷题系列 之 Verilog进阶挑战】~ 存储器专题