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(元注解)相关推荐

  1. 注解_自定义注解_元注解

    * 元注解:用于描述注解的注解 * @Target:描述注解能够作用的位置* ElementType取值:* TYPE:可以作用于类上* METHOD:可以作用于方法上* FIELD:可以作用于成员变 ...

  2. Annotation 最终奥义,元注解

    2019独角兽企业重金招聘Python工程师标准>>> 当你自定义出一个注解的时候,这个注解其实是没法使用的,因为你没有为注解指定的生存范围,生存的目标..因此为了限定自定义注解,就 ...

  3. [转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合

    原文地址:http://blog.csdn.net/ycb1689/article/details/22928519 最新版Struts2+Hibernate+Spring整合 目前为止三大框架最新版 ...

  4. JavaSE学习笔记之Annotation(注解)

    摘自:<疯狂Java讲义 第三版> Annotation简介 从JDK1.5开始,Java增加了对元数据(Metadata)的支持,也就是Annotation(注释),这种Annotati ...

  5. Android -- Annotation(注解)原理详解及常见框架应用

    1,我们在上一篇讲到了EventBus源码及3.0版本的简单使用,知道了我们3.0版本是使用注解方式标记事件响应方法的,这里我们就有一个疑问了,为什么在一个方法加上类似于"@Subscrib ...

  6. SpringMVC之Controller查找(Spring4.0.3/Spring5.0.4源码进化对比)

    0 摘要 本文从源码层面简单讲解SpringMVC的处理器映射环节,也就是查找Controller详细过程 1 SpringMVC请求流程 Controller查找在上图中对应的步骤1至2的过程 Sp ...

  7. java annotation list_Java 注解 (Annotation)你可以这样学

    注解语法 因为平常开发少见,相信有不少的人员会认为注解的地位不高.其实同 classs 和 interface 一样,注解也属于一种类型.它是在 Java SE 5.0 版本中开始引入的概念. 注解的 ...

  8. spring4.0之三:@RestController

    spring4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解.4.0之前的版本,Spring MVC的组件都使用@Controller来标识当前类是一个 ...

  9. 玩转Java注解:元注解、内置注解、自定义注解的原理和实现

    点击关注公众号,实用技术文章及时了解 来源:www.jianshu.com/p/ddd0b880641a 前言 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种 ...

最新文章

  1. 青源 Forum | 人工智能的数理基础前沿系列报告 · 第 4 期
  2. 程序员的杂想-不要只做一名程序员
  3. selenium 定位不到元素总结
  4. Spring之面向切面编程AOP(三)
  5. WebStrom如何设置字体?
  6. 史上最全提现模块案例分解
  7. 用内核对象进行线程同步
  8. 关于QtCharts中的映射器与模型的使用
  9. 高效排错系列--摘要
  10. Java学习笔记——常用类
  11. 向日葵远程控制软件linux版安装
  12. 360安全浏览器极速模式怎么设置
  13. PostgreSQL usermanual翻译暂停20200420
  14. 吉林大学操作系统上机随笔《实验二》
  15. Gerrit用户登录显示Forbidden
  16. win7 64位 纯净版旗舰版202104
  17. 用计算机音乐的歌词,电脑酷狗音乐怎么在屏幕上显示歌词
  18. 深度学习-fashion_mnist预测
  19. 微信视频号封面怎么设置?怎么改?封面制作全教程,快来解锁!
  20. 双目视觉-双目测距原理剖析

热门文章

  1. 28和lba48命令格式区别_编译Sass(命令行)
  2. JAVA实现把指定文件夹下的所有文件压缩成zip包
  3. 在GoogPlay上发布的包Facebook登录失败提示签名问题
  4. ubuntu nginx配置负载均衡篇(一)
  5. 数据库的查询优化建议整理
  6. spark官方文档_Spark整合Ray思路漫谈
  7. python版本切换_怎么切换python版本
  8. Linux中10个有用的命令行补齐命令
  9. 视频测试序列的下载地址
  10. 如何读H.264的标准和代码