博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring4.0之四:Meta Annotation(元注解)
阅读量:6718 次
发布时间:2019-06-25

本文共 1990 字,大约阅读时间需要 6 分钟。

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 {    ...  }

 

 更多关于元数据注解的问题访问这里:

转载地址:http://ymkmo.baihongyu.com/

你可能感兴趣的文章
注解扫描工具
查看>>
第二章 SSH远程登录
查看>>
linux bash echo 颜色高亮
查看>>
配置ASA的Telnet和SSH
查看>>
jsp中表单重置
查看>>
利用tar包安装和配置高可用性的vsftp
查看>>
2.4、Bootstrap V4自学之路------布局---响应式工具
查看>>
约瑟夫问题求解
查看>>
4月12日
查看>>
基于WinSvr2012共享文件夹的Hyper-V实时迁移之三实时迁移的实现及验证
查看>>
证件照片换背景
查看>>
并发编程笔记二:synchronized锁住了谁?
查看>>
js打字效果
查看>>
用铁路局来比喻流程管理系统,工作流引擎,表单.
查看>>
jQuery的发展史,你知道吗?
查看>>
JavaWeb:实现文件上传
查看>>
mysql: unknown variable 'character_set_client=UTF8'
查看>>
zabbix3.0监控的配置
查看>>
SSL/TLS部署最佳实践
查看>>
Screen字符桌面共享
查看>>