Spring4.0之四:Meta Annotation(元注解)
Spring框架自2.0开始添加注解的支持,之后的每个版本都增加了更多的注解支持。注解为依赖注入,AOP(如事务)提供了更强大和简便的方式。这也导致你要是用一个相同的注解到许多不同的类中去。这篇文章介绍meta annotation来解决这个问题。
Meta Annotation(元注解)定义
Spring4.0的许多注解都可以用作meta annotation(元注解)。元注解是一种使用在别的注解上的注解。这意味着我们可以使用Spring的注解组合成一个我们自己的注解。
创建组合注解
自定义注解或组合注解是从其他的Spring元注解创建的。这种注解分为两类:
- 1、只是为了编码简单将多个注解组合成一个注解;
- 2、可以定义一个可复用的注解,这个注解可以解决问题,但是不用记住所有单独的注解。
如以下的DAO操作:
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 { }
使用这个自定义/组合注解,我们可以移除掉DAO上的许多注解:
@MyDao public class OrderDaoImpl implements OrderDao { ... }
注解的属性
大部分情况下,注解是需要属性的。自定义的注解也可以提供属性。比如:@Repositoy可以提供一个name属性。
@Repository("myOrderDao")
由于自定义的@MyDao可能被很多DAO使用,所以对@Repository的name硬编码是不行的。所以我们简单的添加一个value属性到@MyDao上(和@Repository中的相同的value属性)。
@Repository @Scope("prototype") @Transactional(propagation = Propagation.REQUIRES_NEW, timeout = 30, isolation=Isolation.SERIALIZABLE) public @interface MyDao { String value(); }
用新的自定义注解定义bean如下:
@MyDao("myOrderDao") public class OrderDaoImpl implements OrderDao { ... }
更多关于元数据注解的问题访问这里:Srping Framework Reference Documentation
Spring4.0之四:Meta Annotation(元注解)相关推荐
- 注解_自定义注解_元注解
* 元注解:用于描述注解的注解 * @Target:描述注解能够作用的位置* ElementType取值:* TYPE:可以作用于类上* METHOD:可以作用于方法上* FIELD:可以作用于成员变 ...
- Annotation 最终奥义,元注解
2019独角兽企业重金招聘Python工程师标准>>> 当你自定义出一个注解的时候,这个注解其实是没法使用的,因为你没有为注解指定的生存范围,生存的目标..因此为了限定自定义注解,就 ...
- [转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合
原文地址:http://blog.csdn.net/ycb1689/article/details/22928519 最新版Struts2+Hibernate+Spring整合 目前为止三大框架最新版 ...
- JavaSE学习笔记之Annotation(注解)
摘自:<疯狂Java讲义 第三版> Annotation简介 从JDK1.5开始,Java增加了对元数据(Metadata)的支持,也就是Annotation(注释),这种Annotati ...
- Android -- Annotation(注解)原理详解及常见框架应用
1,我们在上一篇讲到了EventBus源码及3.0版本的简单使用,知道了我们3.0版本是使用注解方式标记事件响应方法的,这里我们就有一个疑问了,为什么在一个方法加上类似于"@Subscrib ...
- SpringMVC之Controller查找(Spring4.0.3/Spring5.0.4源码进化对比)
0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sp ...
- java annotation list_Java 注解 (Annotation)你可以这样学
注解语法 因为平常开发少见,相信有不少的人员会认为注解的地位不高.其实同 classs 和 interface 一样,注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念. 注解的 ...
- spring4.0之三:@RestController
spring4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解.4.0之前的版本,Spring MVC的组件都使用@Controller来标识当前类是一个 ...
- 玩转Java注解:元注解、内置注解、自定义注解的原理和实现
点击关注公众号,实用技术文章及时了解 来源:www.jianshu.com/p/ddd0b880641a 前言 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种 ...
最新文章
- LeetCode 167. Two Sum II - Input array is sorted--Python解法
- 浅谈Mybatis的一级缓存和二级缓存
- 10.13 上午 考试
- 大龄程序员失业后,看他们是如何破局突围的? | 技术头条
- 使用struts2的 下载
- c语言调用android surface,Android GUI SurfaceFlinger
- 爬出数据标注陷阱,半监督学习模型暗藏多少玄机?
- 主流的分布式事务解决框架
- 小白学习vuex的超级全面版本
- 为什么都建议学java而不是python-为什么java比python复杂,还是有很多人选择学习java?...
- 笨方法学习python--46--python项目骨架
- 许可协议html,许可协议
- 调查 ESXi/ESX 上的虚拟机文件锁定 (10051)
- 交互体验之产品的文案
- 宏碁传奇Young和宏碁传奇Go14选哪个好参数对比评测
- macOS 10.15 支持的 xcode版本
- 第三章 区块链进阶 [18]
- 【时间序列分析】差分运算及延迟算子的性质
- RabbitMQ--扩展--11--均衡负载
- 合肥计算机专业大学排名23,计算机专业大学排名.doc
热门文章
- Java线程面试题 Top 53
- Html做文章查看上一篇下一篇功能,SDCMS文章添加上一篇、下一篇
- 操作系统 | 用户态和内核态的切换(中断、系统调用与过程(库函数)调用)
- 《Python Cookbook 3rd》笔记(5.5):文件不存在才能写入
- 《Java8实战》笔记(02):通过行为参数传递代码
- linux嵌入式平台测试,protobuf-c 在arm linux 嵌入式平台的使用 测试
- Linux strtol将十六进制转化为十进制
- 完善博文 共享内存一写多读无锁实现的代码逻辑部分
- 解决 SSH Connection closed by foreign host 问题
- 安装ipfs-api的命令变了,最新版的命令如下