当前位置: 首页 > news >正文

手机怎么自创网站/百度一级代理商

手机怎么自创网站,百度一级代理商,wordpress修改主题模板,网站建设怎么外包好JDK5.0注解可以看成是Javadoc标签和Xdoclet标签的延伸和发展。在JDK5.0中,我们可以自定义这些标签,并通过Java语言的反射机制中获取类中标注的注解,完成特定的功能。 注解是代码的附属信息,它遵循一个基本原则:注解不…

JDK5.0注解可以看成是Javadoc标签和Xdoclet标签的延伸和发展。在JDK5.0中,我们可以自定义这些标签,并通过Java语言的反射机制中获取类中标注的注解,完成特定的功能。

注解是代码的附属信息,它遵循一个基本原则:注解不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。

Java语言解释器会忽略这些注解,而由第三方工具负责对注解进行处理。第三方工具可以利用代码中的注解间接控制程序代码的运行,它们通过Java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑,而这正是Spring AOP对@AspectJ提供支持所采取的方法。


1 一个简单的注解类

通常情况下,第三方工具不但负责处理特定的注解,本身还提供了这些注解的定义,所以我们通常仅需关注如何使用注解就可以了。但定义注解类本身并不困难,Java提供了定义注解的语法。下面,我们马上着手编写一个简单的注解类

NeedTest注解类

package com.baobaotao.aspectj.anno;  
import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  @Retention(RetentionPolicy.RUNTIME) //①声明注解的保留期限  
@Target(ElementType.METHOD)//②声明可以使用该注解的目标类型  
public @interface NeedTest {//③定义注解  boolean value() default true;//④声明注解成员  
}  

Java新语法规定使用@interface修饰符定义注解类,如③所示,一个注解可以拥有多个成员,成员声明和接口方法声明类似,这里,我们仅定义了一个成员,如④所示。成员的声明有以下几点限制:

  • 成员以无入参无抛出异常的方式声明,如boolean value(String str)、boolean value() throws Exception等方式是非法的;

  • 可以通过default为成员指定一个默认值,如String level() default “LOW_LEVEL”、int high() default 2是合法的,当然也可以不指定默认值;

  • 成员类型是受限的,合法的类型包括原始类型及其封装类、String、Class、enums、注解类型,以及上述类型的数组类型。如ForumService value()、List foo()是非法的。

在①和②处,我们所看到的注解是Java预定义的注解,称为元注解(Meta-Annotation),它们被Java编译器使用,会对注解类的行为产生影响。@Retention(RetentionPolicy. RUNTIME)表示NeedTest这个注解可以在运行期被JVM读取,注解的保留期限类型在java.lang.annotation.Retention类中定义,介绍如下:

这里写图片描述

在使用时可以忽略成员名和赋值号(=),如@NeedTest(true)。注解类拥有多个成员时,如果仅对value成员进行赋值则也可不使用赋值号,如果同时对多个成员进行赋值,则必须使用赋值号,如DeclareParents (value = “NaiveWaiter”, defaultImpl = SmartSeller.class)。注解类可以没有成员,没有成员的注解称为标识注解,解释程序以标识注解存在与否进行相应的处理;此外,所有的注解类都隐式继承于java.lang.annotation.Annotation,但注解不允许显式继承于其他的接口。

我们希望使用NeedTest注解对业务类的方法进行标注,以便测试工具可以根据注解情况激活或关闭对业务类的测试。在编写好NeedTest注解类后,就可以在其他类中使用它了。


2 使用注解


我们在ForumService中使用NeedTest注解,标注业务方法是否需要测试,

ForumService:使用注解

package com.baobaotao.aspectj.anno;  
public class ForumService {  @NeedTest(value=true) ①  public void deleteForum(int forumId){  System.out.println("删除论坛模块:"+forumId);  }  @NeedTest(value=false) ②  public void deleteTopic(int postId){  System.out.println("删除论坛主题:"+postId);  }     
}  

如果注解类和目标类不在同一个包中,需要通过import引用的注解类。在①和②处,我们使用NeedTest分别对deleteForum()和deleteTopic()方法进行标注。在标注注解时,可以通过以下格式对注解成员进行赋值:

@<注解名>(<成员名1>=<成员值1>,<成员名1>=<成员值1>,...)

如果成员是数组类型,可以通过{}进行赋值,如boolean数组的成员可以设置为{true,false,true}。下面是几个注解标注的例子:

这里写图片描述

@Reviews注解拥有一个@Review注解数组类型的成员,@Review注解类型有三个成员,其中reviewer、comment都是String类型,但comment有默认值,grade是枚举类型的成员。

由于NeedTest注解的保留限期是RetentionPolicy.RUNTIME类型,因此当ForumService被加载到JVM时,仍就可通过反射机制访问到ForumService各方法的注解信息。


3 访问注解


前面提到过,注解不会直接影响程序的运行,但是第三方程序或工具可以利用代码中的注解完成特殊的任务,间接控制程序的运行。对于RetentionPolicy.RUNTIME保留期限的注解,我们可以通过反射机制访问类中的注解。

在JDK5.0里,Package、Class、Constructor、Method以及Field等反射对象都新增了访问注解信息的方法:<T extends Annotation>T getAnnotation(Class<T> annotationClass),该方法支持通过泛型直接返回注解对象。

下面,我们就通过反射来访问注解,得出ForumService 类中通过@NeedTest注解所承载的测试需求

TestTool:访问代码中的注解

package com.baobaotao.aspectj.anno;  
import java.lang.reflect.Method;  
public class TestTool {  public static void main(String[] args) {  //①得到ForumService对应的Class对象  Class clazz = ForumService.class;   //②得到ForumSerivce对应的Method数组  Method[] methods = clazz.getDeclaredMethods();   System.out.println(methods.length);  for (Method method : methods) {  //③获取方法上所标注的注解对象  NeedTest nt = method.getAnnotation(NeedTest. class);  if (nt != null) {  if (nt.value()) {  System.out.println(method.getName() + "()需要测试");  } else {  System.out.println(method.getName() + "()不需要测试");  }  }  }  }  
}  

在③处,通过方法的反射对象,我们获取了方法上所标注的NeedTest注解对象,接着就可以访问注解对象的成员,从而得到ForumService类方法的测试需求。运行以上代码,输出以下的信

deleteForum()需要测试 
deleteTopic()不需要测试

更多关于注解的内容可以参考:

1、学习Spring必学的Java基础知识(5)—-注解
http://www.iteye.com/topic/1123823

2、深入理解Java:注解(Annotation)自定义注解入门
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

3、深入理解Java:注解(Annotation)基本概念
http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html

4、深入理解Java:注解(Annotation)–注解处理器
http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html

5、秒懂,Java 注解 (Annotation)你可以这样学
http://blog.csdn.net/briblue/article/details/73824058

6、深入浅出Java注解
https://zhuanlan.zhihu.com/p/21410338


http://www.lbrq.cn/news/964891.html

相关文章:

  • 电商网站怎么做聚合/北京seo的排名优化
  • 神奇网站/朋友圈推广一天30元
  • 大连筑成建设集团有限公司网站/郑州seo网络营销
  • 安新网站建设/怎样推广产品
  • 上海网站制作网站建设/杭州seo招聘
  • 网站建设包含的费用内容/小红书软文推广
  • 电商网站建设哪好/seo标题优化的心得总结
  • 做网站横幅技巧/优化推广网站怎么做最好
  • 网站做外链推广的常用方法/竞价 推广
  • WordPress分类ID能修改吗/西安网站seo诊断
  • 网站和其他系统对接怎么做/论坛软文案例
  • 驻马店市可以做网站的公司/举出最新的网络营销的案例
  • php和django做网站哪个好/中国seo第一人
  • 做外贸开通哪个网站好/微信引流推广精准粉
  • 重庆做网站的公司/app推广营销
  • 游戏推广渠道/广州seo优化公司排名
  • 网站怎么做兼容测试/互联网推广方式有哪些
  • 浙江 网站建设/怎么引流推广
  • 长春网站建设报价/seo资料站
  • 河北住建局与建设厅网站/合肥网站外包
  • 成都公司核名的网站/站长工具seo综合查询问题
  • 广告宣传图片制作app/郑州网站优化哪家好
  • 西安手机网站制作/日本比分预测最新分析
  • 外国域名注册网站/营业推广的方式有哪些
  • 做网站的费用是多少/网络新闻发布平台
  • 网站关键词怎么做排名靠前/站长工具域名查询ip
  • 哪个网站卖做阳具好点/关键词查网站
  • 朝鲜活埋新冠病人是真的吗/北京中文seo
  • 多个网站备案/seo引擎搜索网址
  • 手机网站开发环境/什么平台可以免费推广产品
  • Git使用与管理
  • Python爬虫入门到实战(3)-对网页进行操作
  • Linux 定时任务全解析:atd 与 crond 的区别及实战案例(含日志备份 + 时间写入)
  • 高性能上位机界面设计范式:C#与C++/C开发调试无缝衔接
  • 面向向量检索的教育QA建模:九段日本文化研究所日本语学院的Prompt策略分析(6 / 500)
  • 混合参数等效模型