1。XML部长近几年,XML部长官邸人潮涌动。大大小小官方,Spring、Hibernate、MyBatis等,来京必访。府中果然红极一时,正值人生巅峰。原因很简单。Java帝国几乎所有的配置文件都使用XML。自然都是由XML部长管理。想想都难!其他大臣看在眼里,恨在心里。他们决定团结起来,坚决反对XML部长的嚣张气焰。气焰嚣张的他毅然决然的把白钱转到了自己家里。和几个老家伙商量后,决定选老牌的IO部长当领导,给XML部长一点颜色。2、安翰林提出了一个方案,IO部长想了半天,也没有什么好的解决办法。这日,有个安姓翰林,自报家门,求见他,说是可以帮助工部尚书。“安先生有何建议?”IO大臣懒洋洋的问道,他不喜欢这些读死书的御史。“大人,下任官员负责Java注解,对付XML大臣或许是个突破口。”“注释?这是什么?”IO部长确实有点老了。“它实际上是元数据。”“元数据?”水。“嗯,Metadata”安汉林把英文都拼出来了。“卖了推了?”IO部长显然不会说英语。旁边的工作人员不停地使眼色,语重心长地劝告安汉林要通俗易懂。安翰林道:“大人一定知道@Override、@SuppressWarning等注解吧?”IO部长点点头。安汉林接着说:“所谓元数据,就是描述数据的数据。换句话说,它可以为其他数据提供描述信息。例如,Java类中的方法可以认为是一种数据。如果我的@Override一旦用在这个方法上,就意味着需要重写父类/接口的方法,所以我的@Override为这个方法提供了额外的信息。”“但是在源码里写@Override好像没有用?”IO部长问道“所以这只是元数据,它为其他数据(例如Java方法)提供信息,但是如何使用这些信息是我无法控制的。""谁负责?""例如,@Override由编译器管理。编译这个Java文件时,会检查@Override修饰的方法是否与父类的方法和参数相同。如果不同,就会报错。”IO部长说:“哦,我明白了。所谓注解,有点像注解的加强版。这个“注解”不仅有一定的格式,而且有特定的含义,以便其他工具读取它来做事。!”安汉林松了口气,暗暗佩服这位IO部长的总结能力。“我记得这个@Override注解是很久以前做的,好像是JDK1.4的。本来内置了@Override、@Deprecated、@SuppressWarnings等注解,但用处不大,我有一个想法,就是让受试者自定义注解。”安翰林开门见山地说。“定制?让受试者自己写?”“是的,大人,比如我可以自定义一个注解,叫@Test:”安翰林说着,把写好的代码提交上去。这里调用了Test,它有一个ignore方法,一会儿你会看到它的使用,这个注解是@Target(ElementType.METHOD)应用在方法上,@Retention(RetentionPolicy.RUNTIME)在运行时起作用。IO部长问:“等一下,我怎么还看到了@Target,@Retention,这是什么东西?”“这叫元注解,可以认为是注解的注解。”安翰林笑着说,“@Target表示注解的应用对象,可以是类、方法、方法参数等,@Retention表示注解应该保留的时候,只能在源码中,或者在类文件中,或者是运行时。“注解的注解真是一口,这个自定义注解@Test怎么用?”安汉林又展示了一段代码:IO部长看了看,觉得这个自定义注解和JDK内置的注解差不多。@Test修饰方法,表示该方法可以作为测试用例运行。@Test(ignore=true)表示虽然这是一个测试方法,但是暂时忽略,不需要运行。真是简洁清爽,老夫我还真是小看这个安汉林了。“@Test注解的定义和使用只是定义了行为的语义,如何实现这个行为?”IO部长问安汉林。如果注解是@Test,没有被忽略,那么通过反射就可以执行方法,是不是很简单?”IO部长微微点头表示同意,然后我闭上眼睛陷入了沉思:这东西有点意思。给一个方法加上一个简单的装饰注解@Test后,这个方法顿时多了额外的语义,变成了一个可执行的测试用例!如果我是一个XML老人,我应该如何描述类似的行为?可能是这样:与简洁的@Test注解相比,这个方法太复杂了。更重要的是,每增加一个新的方法,除了修改Java文件之外,还得记得修改这个XML文件,实在是太麻烦了。嗯,看来这个注解确实是??个杀手锏。慎用,一击必中。想到这里,IO大臣睁开眼睛,笑了笑,让安翰林写一篇《注解详奏》,我适时呈上皇上。3、初六晨战晴天,IO大臣见早朝皇帝心情大好,便上奏奏章。“注释?这是什么?”皇上根本懒得去了解细节。“陛下,这个注解可以部分替代一些XML配置工作。”IO部长小心翼翼的回答,同时用眼角的余光扫了XML部长一眼。看到IO大臣攻击自己,XML大臣顿时警觉起来,连忙道:“陛下,可否让老大臣看看?”皇上示意卢公公将奏折交给XML大臣。XML部长看了一会,意识到不对劲。有了这东西,让臣民自定义注解,自身的力量就会被大大削弱。可怕的一幕出现在了XML部长的脑海中。Spring、Struts、Hibernate等相继翻脸,都使用注解来配置系统。一点火花很快就熄灭了。“陛下,按照老臣的意见,这个办法是绝对不可行的!”XML部长坚定地说。“为什么不可行?使用注解,贴近代码的配置,易读,易修改!”IO部长立马反驳,为了显示易读易修改,IO部长还当场写了一段代码,描述了一个普通的Java类是如何提交到Database表列映射的。朝中多位部长齐声欢呼,为IO部长们挥舞旗帜。”单独看一个当然很清楚,但是如果太多了,配置就散落在各个Java文件中,极难找,哭都来不及。如果用XML,所有的配置都集中在一个地方,一目了然,要修改配置还得改Java源文件重新编译部署,这不是很可笑吗?!XML大臣也不甘示弱,看到两位重臣开始明争暗斗,皇上决定议和,既不想家族独霸,又想平衡朝鲜和中国的关系。”两位爱好者,按照我的看法,还是先在JDK中加入对自定义注解的支持比较好。至于是用注解还是XML,让我的人选!”看到皇帝下定决心,两位大臣只好下台。配置占据了垄断地位,很多人两者一起使用!对于一些需要集中配置的场合,比如数据源配置,自然是使用XML。另一方面,对于@Controller、@RequestMapping、@Transactional等注解,大家更喜欢用Java方法写,简单直观。这就像朝鲜和中国的情况一样,没有人可以独裁一场大战,唯一的大赢家可能就是安汉林,安汉林被任命为批注部部长,负责管理风俗批注。【本文为专栏作家“刘欣”原创稿件,转载自通过作者微信求证公众号编码转载】点此查看该作者更多好文
