1. 絮絮叨叨
	要么是注解跟我有仇,要么是公司配发的笔记本跟我有仇,要么是因为心急吃不了热豆腐
	痛定思痛:从头开始,新建一个Java项目,实现一个超级简单的注解@Hello
	通过获取被标识类的类名(原类),创建对应的Hello类;Hello类中,有一个sayHello()方法,可以打印原类的类名
	在此,记录一下如何定义一个简单的Java编译时注解处理器
	PS:附上之前的注解学习文档 —— 1. Java注解
	1.1 AbstractProcessor
	自定义Java编译时注解处理器,一般都是通过继承AbstractProcessor实现的
	AbstractProcessor类实现了Processor接口,为自定义注解处理器提供了便利
	一般的话,只需要重写process() 方法即可,其他方法按需重写
	public synchronized void init(ProcessingEnvironment processingEnv) 
	public Set<String> getSupportedAnnotationTypes()
	public SourceVersion getSupportedSourceVersion() 
	public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) 
	init()方法
	注解处理器都使用默认构造函数(入参和方法体都为空)进行创建,init() 方法以在注解处理器创建好后执行一些初始化工作
	ProcessingEnvironment是JDK为注解处理器提供的注解处理的工具框架
	通过processingEnv,可以获取注解处理中经常使用到的、有用的工具类实例,如Messager、Filer、Elements等
	getSupportedAnnotationTypes()方法
	在该方法中,可以指定注解处理器支持的注解,准确地说是注解的Name,如MyAnnotion.class.getCanonicalName()
	AbstractProcessor的默认实现:获取类头部@SupportedAnnotationTypes注解的value,其value是一个String[];如果是没有使用@SupportedAnnotationTypes,则返回一个空的set
	总结: 注解处理器支持的注解,要么在方法体里面指定,要么通过@SupportedAnnotationTypes指定
	getSupportedSourceVersion()方法
	在该方法中,可以指定Java源代码的版本(source version)
	AbstractProcessor的默认实现:获取类头部@SupportedSourceVersion注解的value,其value是一个枚举类SourceVersion;如果是没有使用@SupportedSourceVersion,则返回SourceVersion.RELEASE_6
	总结: 注解处理器支持的sourceVersion,要么该方法体中指定,要么通过@SupportedSourceVersion指定
	process()方法(重头戏)
	相当于注解注解器的main方法,实现对被已注册的注解标注的element(方法、类、接口等)的处理
	process方法对注解的处理不是一次到位的,可能存在多个round
	每次都是处理上一轮的element上标注的注解,并返回这些注解是否已经被注解处理器声明
	如果返回true,后续的注解处理器将不会处理这些注解
	对process()方法中声明的理解
	之所以叫编译时注解处理器,是因为源代码被compiler编译成字节码前,会先扫描源代码中的注解
	如果注解有对应的注解处理器,则会调用process() 方法处理被注解标注的element
	这个处理过程可能会产生新的源代码、甚至修改已有的源代码,因此需要进行多轮的注解处理
	自己的理解待验证,后续有空会做验证的 
     
							
						
							
								
							
								
						
						
							
								
							
								
						
					
				如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h65151.shtml
- 上一篇:Redis内存满了怎么办?怎么优化?
 - 下一篇:HashMap底层实现原理详解
 
必备CSS教程Essential CSS Tutorials
							- css height
 - css line-height
 - css width
 - css min-width
 - css max-width
 - css min-height
 - css max-height
 - css border
 - css background
 - css float
 - css clear
 - css display
 - css font
 - css text-transform
 - css英文首字母大写
 - css font-variant
 - css font-weight
 - css font-style
 - css text-decoration
 - css 删除线
 - div css 虚线
 - css 注释
 - html 注释
 - css padding
 - css margin
 - css 文本
 - css font-size
 - css font-family
 - css color
 - css text-align
 - css text-indent
 - css 超链接(css a)
 - css 优化压缩
 - css id(css #)
 - css class(css .)
 - css ul li列表
 - css 圆角圆边
 - css 父级子级
 - css 指针概念
 - css cursor
 - css overflow
 - html px em pt网页单位
 - CSS important
 - CSS position
 - css z-index
 - css white-space
 - css img图片
 - css class id
 - css link与@import区别
 - css 选择器
 - css引入html
 
必备HTML基础教程Essential HTML Tutorials
							- html img图片标签
 - html em标签(EM强调标签)
 - html strong加粗(strong标签)
 - html B加粗(b加粗标签)
 - strong与B加粗区别
 - h1 h2 h3 h4标签(html标题标签)
 - html A超链接锚文本
 - html注释
 - html head头部标签
 - html title标题标签
 - html meta标签
 - html link标签
 - html i斜体标签
 - html u下划线标签
 - html s删除线标签
 - html换行br标签
 - html p段落标签
 - p标签与br标签区别
 - html div标签元素
 - html span标签
 - html font标签
 - html script标签
 - html px em pt网页单位
 - html ul li列表
 - ol li列表
 - dl dt dd标签组
 - table tr td表格
 - table tr th表格
 - html form表单
 - html form input
 - html form textarea文本区域
 - html select下拉与跳转(Html select)
 - html iframe框架
 - html网页结构
 - htm html shtml区别用法
 - 网页编码charset
 - UTF-8 GBK UTF8 GB2312区别联系
 - 先写html还是先写CSS
 - 显示扩展名
 - html标签大全集合
 - html常用标签
 - 网页源代码是什么
 








