Java基础复习笔记12Java自定义注解Annotation的使用

 

1.       前言

自JDK1.5以后,推出了注解新特性。注解的推出其实最主要的目的是为了让广大的用户认知EJB3.0,因为EJB2.X广受大多数开发者的诟骂和质疑。为了减少配置、让注解替代配置。有了注解,我们以前看似一般的、普通的JavaBean就有了活力,有了内涵,有了新的契机。配合Sun的JPA规范,EJB3.X又再次在企业级开发中大放异彩,让很多开发者赞不绝口。也许是无心插柳,这种“零配置”思维也影响着Java其他的开源项目——像Struts、Spring、Hibernate(也就是咱们耳熟能详的SSH)不都是具有“零配置”支持嘛!Java现在也是往动态、敏捷的方向发展着。有可能将来配置文件越来越少、规范、约定、注解代替了繁琐的配置信息。而XML估计会回归原始的使命——数据传输与数据交换。

2.       自定义注解

至于已有的注解,比如:JPA、EJB、Spring零配置等等怎么使用相信各位读者都能掌握,这里主要是说如何自定义自己的注解,自己使用自定义的注解。

我们先用一个简单的例子来看

Java代码 复制代码  收藏代码
  1. package annotation;   
  2.   
  3. import java.lang.annotation.Retention;   
  4. import java.lang.annotation.RetentionPolicy;   
  5.   
  6. /**  
  7.  * 注解  
  8.  *   
  9.  * @author Administrator  
  10.  */  
  11. @Retention(RetentionPolicy.RUNTIME)   
  12. public @interface Test {   
  13.   
  14.     String isAop() default "false";   
  15.   
  16. }  
package annotation;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;/** * 注解 *  * @author Administrator */@Retention(RetentionPolicy.RUNTIME)public @interface Test {	String isAop() default "false";}
 用关键字 @interface定义一个注解标记,使用 @interface关键字实际上的意思就是该接口继承自java.lang.annotation.Annotation接口。
Java代码 复制代码  收藏代码
  1. String isAop() default "false";  
String isAop() default "false";

 这句话代表的意思就是在Test注解中可以含有属性名为isAop,此属性的类型是字符串类型。客户端使用的时候可以根据需要自己指定相关的属性值。如果客户端不指定值,默认值是false

Java代码 复制代码  收藏代码
  1. @Retention(RetentionPolicy.RUNTIME)   
  2. package use;   
  3.   
  4. import annotation.Test;   
  5. import annotation.TestImpl.TestProcess;   
  6.   
  7. @Test(isAop = "true")   
  8. public class UseTest {   
  9.   
  10.     /**  
  11.      * @param args  
  12.      * @throws ClassNotFoundException  
  13.      */  
  14.     public static void main(String[] args) throws ClassNotFoundException {   
  15.   
  16.         TestProcess.process("use.UseTest");   
  17.   
  18.     }   
  19.   
  20. }  
@Retention(RetentionPolicy.RUNTIME)package use;import annotation.Test;import annotation.TestImpl.TestProcess;@Test(isAop = "true")public class UseTest {	/**	 * @param args	 * @throws ClassNotFoundException	 */	public static void main(String[] args) throws ClassNotFoundException {		TestProcess.process("use.UseTest");	}}

 在客户端调用中在类UseTest上使用了@Test(isAop = "true")注解。仅仅定义了注解就像《三国杀》里,刘备是主公,他有“激将”的主公计,下了个命令:“蜀将何在?”,刘备的这句话太抽象了,蜀将相当于一个注解。在场的所有蜀将就像加了此注解的类,都会受到这句话的影响。具体替不替刘备出杀,~~~~个人表现不同(得先看看自己的身份啊)反贼的表现是:“这个真没有”;忠臣的表现是,先看看手上有杀吗?有,出击吧!没有就说:“这个……真没有!”;内奸的反应是:“唉,先保命还是装一装忠臣?比较纠结!”。这里的身份就好像是注解的属性的不同值。具体的处理就相当于针对注解的处理实现类。注解的具体实现类就是处理注解的业务逻辑,它需要Java的反射机制来处理客户目标类的具体注解,我们就来看看这个注解处理实现类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值