之前实习参与一个创新性的框架的开发工作,之前就有要开发一个框架的想法但是却一直没有付诸行动,这个项目也暴漏出了自己很多的不足,其中注解就是我一个很大的盲点,记得第一次使用注解是在使用Juint测试框架的时候使用@Test注解编写测试代码,当时就感觉好高端,竟然可以脱离main函数运行程序,之后使用Spring MVC中的各种注解像@Controller、@AutoWire、@RequestMapping、@RequestBody等注解的功能是相当好用省去了配置XML的麻烦。虽然使用过很多注解但是对注解的实现原理还是两眼一抹黑。所以现在正好利用这个机会一要探注解的奥妙。
注解是在java 1.5中添加的新特性,是对来自像C#之类的语言对Java语言特性压力所做出的一种回应。注解在<<Think in Java>>中的定义是:注解(也被成为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。
那么我们来看一下在开发中使用注解的好处:
1,注解可以用来生成描述符文件,甚至或是新类的定义,并且有助于减轻编写“板代码”的负担。
2,更加干净易读的代码以及编译期类型检查。
那么我们经常见到的Java中遇到的注解都有哪些呢?Java5中内置了三种注解,在java.lang包下:
1,@Override,表示覆盖或者实现超类中的方法。如果方法签名和超类中的不一样怎会提示错误。
2,@Deprecated 如果程序员使用了注解为它的元素,那么编译器会发出警告信息。
3,@SuppressWarnings 关闭不当的编译器警告信息。
另外还有四类注解用于新注解的创建。
@Target表示注解可以用在什么地方,
其中可能的ElementType参数有
1、CONSTRUCTOR:作用于构造器
2、FIELD:作用于域(包括enum实例)
3、LOCAL_VARIABLE:作用于局部变量
4、METHOD:作用于方法声明
5、PACKAGE:作用于包
6、PARAMETER:作用于参数
7、TYPE:作用于类、接口(包括注解类型)或者enmu声明
@Retention表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括
1、SOURCE:注解在代码层面,在编译时向北抛弃
2、CLASS:注解在class文件层面,但是会被JVM所抛弃。
3、RUNTIME:JVM将在运行期间保留注解,因此可以通过反射机制读取注解的信息。
@Document标识将注解包含在Javadoc中
@Inherited表示允许子类继承父类中的注解
下面举出一个定义注解的例子,确实有点像定义接口不过这里在interface前面多了一个@
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface AutoTrigger { public int id(); public String description() default "no description"; }
注解的使用会涉及到注解的扫描,记得在使用Spring的时候会经常配置要扫描的路径,在扫描的时候必然会涉及到一些反射的知识,典型的例子就是Spring MVC在框架中用到了@RequestMapping,而且被RequestMapping所修饰的方法还需有方法参数的自动赋值,我当时就对这两块进行了着重的研究并自己实现了类似的功能,流程无外乎先把源代码中的添加注释的类,方法扫描出来并存储在Map中,请求路径为Key,方法Method实例作为值 ,当HTTP请求过来以后对请求进行解析,然后在Map中找到对应的Method,然后根据请求的参数对此方法中的参数进行赋值,最后进行invoke,不过里面的处理细节会更加复杂一些。当时使用了javasist来对参数名进行获取。将注解添加进自己的项目中会大大的减少系统中的冗余代码,用过之后就会发现还是瞒酷的。
相关推荐
基于Java注解的Drools业务规则开发框架设计实现.pdf
基于Java注解的Drools业务规则开发框架设计实现
采用完全注解的方式实现 注解方式SSH框架项目设计详细的说明
一个BaseActivity基类 封装了不同网络访问状态下界面切换 toolbar标准 以及DataBinding实现无需findViewbyid 和Butterknife超长注解成员变量 Activity管理类
的的确确是本好书。这本书把.net平台上经常用的一些技术讲得是明明白白,让你读后只有一个感觉:通透,就好像吃了芥末一样。Jeffrey Richter在这本书中可谓深入浅出,浅的地方讲了C#语言的语法方面,深的地方,讲了...
本项目是基于Java开发的JFinal极速WEB+ORM框架设计源码,主要使用Java进行开发。项目共包含452个文件,其中Java源代码文件440个,JFinal框架配置文件4个,文本文件3个,XML配置文件2个,Git忽略配置文件1个,项目...
适合Java软件开发,它将配合数据库已经jquery和easyui来实现软件项目的开发
JAVA设计模式--程序设计--反射--注解--泛型
本项目是基于MVC模式的轻量级Z-PHP框架设计源码,主要使用PHP进行开发。项目共包含25个文件,其中PHP源代码文件21个,Git忽略配置文件gitignore 1个,项目许可证文件LICENSE 1个,Markdown文档文件md 1个,以及TTF...
本项目是基于Java开发的WebBase业务系统框架设计源码,主要使用Java进行开发。项目共包含416个文件,其中Java源代码文件132个,JavaScript源代码文件110个,XML配置文件39个,CSS样式文件38个,JSP页面文件36个,PNG...
本项目是基于Apache Spark和ADAM开发的Spark-GATK基因组分析框架设计源码,主要使用Scala进行开发。项目共包含72个文件,其中JAR打包文件59个,Markdown文档文件3个,Scala源代码文件2个,项目许可证文件1个,Python...
**ASP.NET基于工作流引擎的系统框架设计开发(源代码+论文)** 本资源提供了一个全面且深入的ASP.NET基于工作流引擎的系统框架设计开发解决方案。它包含了详细的源代码和相关的学术论文,旨在帮助开发者理解并实现...
1.1.2 精心设计的框架设计代价高 3 1.1.3 精心设计的框架充满利弊权衡 3 1.1.4 精心设计的框架应该借鉴过去 4 1.1.5 精心设计的框架要考虑未来发展 4 1.1.6 精心设计的框架应具有良好的集成性 4 1.1.7 ...
ZBLibrary Android快速开发框架:基于Android开发,包含398个...该项目是一个Android MVP快速开发框架,旨在为开发者提供一个示例全面、注释详细、使用简单、代码严谨的开源UI框架,帮助快速开发高质量的Android应用。
基于JavaWeb编写的球鞋销售系统,采用三层框架设计;前端使用Bootstrap+JSP实现。 代码有注释,高分必看。 基于JavaWeb的球鞋销售系统毕业设计源码。基于JavaWeb编写的球鞋销售系统,采用三层框架设计;前端使用...
SpringBoot 毕业设计,SpringBoot 课程设计,基于SpringBoot+Vue开发的,含有代码注释,新手也可看懂。ssm整合开发,小程序毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:...
注解(Annotation)JDK5.0引入 内置注解: @Override:重写方法 @Deprecated:废弃 @SuppressWarnings:镇压警告 元注解(meta-annotation): 可自定义注解 @Target:描述注解的使用范围,传入value...反射(框架设计的
FastECAndroid通用框架设计与完整电商APPlatte-annotations:注解model-提供代码生成器所需注解类型为Java Librarylatte-compiler:代码生成器model-从注解获取信息,通过annotationProcessor或apt生成代码类型为...
本书为框架设计师和广大开发人员设计高质量的软件提供了权威的指南。书中介绍了在设计框架时的最佳实践,提供了自顶向下的规范,其中所描述的规范普遍适用于规模不同、可重用程度不同的框架和软件。这些规范历经.NET...