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上的许多注解:

注解的属性

大部分情况下,注解是需要属性的。自定义的注解也可以提供属性。比如:@Repositoy可以提供一个name属性。

@Repository("myOrderDao")  

由于自定义的@MyDao可能被很多DAO使用,所以对@Repository的name硬编码是不行的。所以我们简单的添加一个value属性到@MyDao上(和@Repository中的相同的value属性)。

用新的自定义注解定义bean如下:

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

Spring4.0之四:Meta Annotation(元注解)的更多相关文章

  1. Spring4.0系列9-websocket简单应用

    http://wiselyman.iteye.com/blog/2003336 ******************************************* Spring4.0系列1-新特性 ...

  2. 元注解——java.lang.annotation.Target(1.8)

    参考资料:https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html 普通注解’只能用来注解’代码’,而’元注 ...

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

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

  4. 【Spring实战-2】Spring4.0.4整合Hibernate4.3.6

    作者:ssslinppp      源程序下载:http://download.csdn.net/detail/ssslinppp/8751185  1. 摘要 本文主要讲解如何在Spring4.0. ...

  5. Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合(转)

    原文  http://blog.csdn.net/songanling/article/details/22454973 最新版Struts2+Hibernate+Spring整合     目前为止三 ...

  6. Java Annotation自定义注解详解

    在开发过程中总能用到注解,但是从来没有自己定义过注解.最近赋闲在家,研究整理了一番,力求知其然知其所以然. 本文会尝试描述什么是注解,以及通过一个Demo来说明如何在程序中自定义注解.Demo没有实际 ...

  7. Spring4 MVC Hibernate4集成 Annotation

    Spring4 MVC Hibernate4集成 Annotation 一.本文所用环境 二.工程目录 三.Maven添加依赖 四.新建数据库表 五.配置文件 六.Model层 七.DAO层 八.Se ...

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

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

  9. [读书笔记] 二、条件注解@Conditional,组合注解,元注解

    一.条件注解@Conditional,组合注解,元注解 1. @Conditional:满足特定条件创建一个Bean,SpringBoot就是利用这个特性进行自动配置的. 例子: 首先,两个Condi ...

随机推荐

  1. webapi core2.1 Identity.EntityFramework Core进行配置和操作数据 (一)没什么用

    https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&am ...

  2. 《DSP using MATLAB》Problem 5.21

    证明: 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  3. Go Example--打点器

    package main import ( "time" "fmt" ) func main() { // 定时器 是当你想要在未来某一刻执行一次时使用的 - ...

  4. [原] Android上使用native IO

    首先, 官方google play对APK大小有限制: 50M.( https://support.google.com/googleplay/android-developer/answer/113 ...

  5. 【java编程】使用System.getProperty方法,如何配置JVM系统属性

    转载:https://www.cnblogs.com/acm-bingzi/p/6673823.html很多时候我们需要在项目中读取外部属性文件,用到了System.getProperty(" ...

  6. RN中移动组件开发

    在原生的开发中,如果要自定义一些控件,可能会用到touch的相关方法,而React Native也有一套touch机制,说白了就是用JS写了一套方法打通android和ios平台,这里简单讲解下Rea ...

  7. getpwnam,getgrnam,getpwent,crypt等函数

    [root@bogon code]# cat a.c #include<stdio.h> #include<pwd.h> int main() { struct passwd ...

  8. airflow-operator 可以管理airflow 的kuberntes 自定义controller && crd

    使用airflow-operator 我们可以让airflow 可以很方便的运行在k8s集群环境中,当前还在开发中 主要分为两部分:airflowbbase && airfowclus ...

  9. zabbix--3.0--3

      使用JMX监控jvm   vim /usr/local/tomcat/bin/catalina.sh 添加如下内容 CATALINA_OPTS="$CATALINA_OPTS -Dcom ...

  10. SpringBoot2

    2018.3月Spring Boot2.0发布,是Spring Boot1.0发布4年之后第一次重大修订.Spring Boot2.0版本经历了 17 个月的开发,有 215 个不同的使用者提供了超过 ...