Java 注解与注解处理器 文章目录 注解用处 如何定义一个注解 注解处理器 运行时注解处理器 注解用处 注解( 也被成为元数据 ) 为我们在代码中添加信息提供了一种形式化的方法, 使我们在稍后的某个时刻非常方便的使用这些数据...中 @Inherited: 允许子类继承父类中的注解 什么时候使用注解呢?...注解在一定程度上把元数据和源代码结合在一起, 而不是把数据保存在外部配置文件中. 所以当创建描述符性质的类或者接口时, 一旦其中包含了重复性的工作, 可以考虑使用注解来简化和自动化该过程....如何定义一个注解 注解的定义很像 Java 接口的定义, 实际上, 注解也将被编译成 Class 文件 import java.lang.annotation.*; @Target(ElementType.METHOD...这个问题交给注解处理器来时回答吧 注解处理器 如果没有用来读取注解的工具, 那注解也不会比注释更有用.
概述 注解处理器(Annotation Processor),是javac的一个工具,用来在编译时扫描和处理注解。...一个注解处理器以Java代码(或者编译过得字节码)作为输入,生成.java文件作为输出。 接下来我们模仿ButterKnife 实现一个@BindView的注解来了解Java注解处理器的使用。...bindview-compiler:定义注解处理器,处理被@BindView标记的代码,并在编译时生成xxxActivity_ViewBinding.java bindview-api:工具类,调用xxxActivity_ViewBinding.java...bindview-annotation(自定义注解) 创建注解类BindView ? bindview-compiler(注解处理器) 在该module的build.gradle中添加如下代码: ?...ClassCreatorProxy是创建Java代码的代理类: ? bindview-api(注解生成代码的调用工具类) 创建注解工具类BindViewTool ?
日期处理类 Date类 当前日期时间 java.util.Date import java.util.Date; public class TestDemo { public static void...long date) 接收 long 型数据,相当于把long数据转为Date 转换为 long 型: public long getTime() 将Date数据转为long型数据,便于格式化输出处理...专门实现国际化开发的包 simpleDateFormat是专门处理日期格式的类,转换为String显示 构造方法*: public SimpleDateFormat(String pattern)...字符串转为日期 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public...valueOf() long 与 Date 转换依靠的是 Date 类提供的构造以及 getTime() Calendar 类 日期计算 Calendar是一个抽象类 import
文章目录 一、生成 Java 代码 二、实现 IButterKnife 接口 三、视图绑定主要操作 四、完整注解处理器代码 五、博客资源 Android APT 学习进阶路径 : 推荐按照顺序阅读 ,...从零基础到开发简易 ButterKnife 注解框架的学习路径 ; 【Java 注解】注解简介及作用 【Java 注解】自定义注解 ( 注解属性定义与赋值 ) 【Java 注解】自定义注解 ( 元注解...APT】编译时技术 ( 编译时注解 和 注解处理器 依赖库 ) 【Android APT】编译时技术 ( 开发编译时注解 ) 【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 【...Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 ) 【Android APT】注解处理器 ( Element 注解节点相关操作 ) 【Android APT】注解处理器...类型的 注解节点 , 按照所在 Activity 进行了分组 ; 本篇博客开发 注解处理器 的 生成代码部分 ; 一、生成 Java 代码 ---- 上一篇博客 【Android APT】注解处理器
概述 我们接触的注解主要分为以下两类 运行时注解:通过反射在运行时动态处理注解的逻辑 编译时注解:通过注解处理器在编译期动态处理相关逻辑 平时我们接触的框架大部分都是运行时注解,比如:@Autowire...我们今天来详细介绍一下,不过再介绍之前,可以先简单了解一下Java注解的基本概念 Java注解 注解处理器 注解处理流程 注解编译期处理流程最关键的一个类就是Processor ,它是注解处理器的接口类...,我们所有需要对编译期处理注解的逻辑都需要实现这个Processor接口,当然,AbstractProcessor 抽象类帮我们写好了大部分都流程,所以我们只需要实现这个抽象类就可以很方便的定义一个注解处理器...注解处理器的处理步骤: 在java编译器中构建; 编译器开始执行未执行过的注解处理器; 循环处理注解元素(Element),找到被该注解所修饰的类,方法,或者属性; 生成对应的类,并写入文件; 判断是否所有的注解处理器都已执行完毕...[] ; 匹配上的注解,会通过当前的注解处理类的 process方法传入。
前言 本文主要讲解Java的其他两个重要的技术点:枚举类(Enum)和注解(Annotation),这两个在平时开发中经常用于公共工程。...枚举类可以直接使用其常量值,也可以通过调用其方法获取相关信息。 注解(Annotation)是Java 5引入的一个特性,它是一种元数据机制,用于提供有关代码的附加信息。...要自定义注解,需要创建一个接口或抽象类,并使用@Target和@Retention注解来指定该注解可以用于哪些元素,并指定该注解在运行时是否可用 一、Java枚举类Enum 1.自定义枚举类...实现接口的枚举类 二、注解(Annotation)概述 注解是Java 5引入的一个特性,它是一种元数据机制,用于提供有关代码的附加信息。...总结 Java枚举类(Enum)和注解(Annotation)都是Java语言中重要的特性,它们提供了一种方便的方式来定义常量、提供元数据信息和实现各种功能。
package com.fh.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image...; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; //import java.io.FileOutputStream...com.sun.image.codec.jpeg.JPEGCodec; //import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 说明:图片水印处理类
---- Class类简介 Cass类位于jdk的java.lang包下 ? 虽然不在反射包下面,但是类中import了很多反射的类 ? 所以和反射有很大关系 反射,在平时使用中,不是很多。...以及 native的jni理解 , 由于个人能力问题,我们掠过ClassLoader和Class中的jni理解 ---- 具体调用 通常分为2种类型,3中写法 如果有对象,可以获取这个对象Class类中的信息...>[] : 声明的类 具体获取,可以通过Class对象的方法获得 Field: getFields() : 获取 包括父类的public的 Field[] getDeclaredFields() :...获取 本类所有的 Field[] getField(name) : 根据 名字,获取包括父类具体的public Field getDeclaredField(name) :根据名字,获取本类Field...parameterTypes):根据 参数类型(可变参数), 获取具体 Constructor ---- 其他 当然,除了常见的 属性 Field,方法 Method,构造 Constructor Class还会操作 注解
package com.fh.util; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import...java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException...; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import...java.nio.channels.FileChannel; import java.nio.channels.FileChannel.MapMode; /** * 说明:文件处理 * 作者:FH...IOException e) { e.printStackTrace(); } } } /** * Mapped File way MappedByteBuffer 可以在处理大文件时
---- Constructor类理解 这里Constructor,我们知道是构造函数 为什么是数组形式的呢?..."); 异常等问题的处理,我们略 下面通过getConstructor0(empty, Member.DECLARED); 获得一个 Constructor,在执行方法(执行的方法,我们后面几节会提到...() at java.lang.Class.getConstructor0(Class.java:2971) at java.lang.Class.getConstructor...(DoConstructor.java:61) at com.aohuan.dodo.javacode.reflect.sample1.DoConstructor.main(DoConstructor.java...那我们回想下前面提到的Constructor类 ---- Constructor 类 newInstance() 那我们尝试一下对应的 Constructor类 调用2个构造的方法试试 /** *
对于@Target和@Retention是由Java提供的元注解,所谓元注解就是标记其他注解的注解,下面分别介绍 @Target 用来约束注解可以应用的地方(如方法、类或字段),其中ElementType...,分别是@DBTable(用于类上)、@Constraints(用于字段上)、 @SQLString(用于字段上)、@SQLString(用于字段上)并在Member类中使用这些注解,这些注解的作用的是用于帮助注解处理器生成创建数据库表...有了上述注解和使用,剩余的就是编写上述的注解处理器了,前面我们聊了很多注解,其处理器要么是Java自身已提供、要么是框架已提供的,我们自己都没有涉及到注解处理器的编写,但上述定义处理SQL的注解,其处理器必须由我们自己编写了...这便是利用注解结合反射来构建SQL语句的简单的处理器模型,是否已回想起Hibernate?...为了处理上述的新增注解,Java8还在AnnotatedElement接口新增了getDeclaredAnnotationsByType() 和 getAnnotationsByType()两个方法并在接口给出了默认实现
整体实现三步骤: 自定义注解 工具类方法实现反射 使用(测试) 1、自定义注解 import java.lang.annotation.*; @Target({ElementType.FIELD,...ElementType.TYPE}) //Target 注解的使用域,FIELD表示使用在属性上面,TYPE表示使用在类上面 @Retention(RetentionPolicy.RUNTIME) //...2、工具类方法实现 import java.lang.reflect.Field; import java.lang.reflect.Method; import java.sql.Timestamp;...是启用和禁用访问安全检查的开关 if(fd.isAnnotationPresent(RelMapper.class)||dtoExistAnno){ //判断field上注解或类上面注解是否存在...处理转换 value = (entFieldType.equals(dtoFieldType))?
文章目录 一、注解处理器 依赖 编译时注解 二、设置 注解处理器 支持的注解类型 三、设置 注解处理器 支持的 Java 版本 四、博客资源 Android APT 学习进阶路径 : 推荐按照顺序阅读...【Android APT】注解处理器 ( 注解标注 与 初始化方法 ) 中 开始开发 AbstractProcessor 注解处理器类 , 使用 com.google.auto.service:auto-service...和 Messager 工具类 ; 一、注解处理器 依赖 编译时注解 ---- 注解处理器 需要处理 编译时注解 , 因此必须能够拿到 编译时注解 的引用 , 注解处理器 Module 需要依赖 编译时注解...支持的注解类型 ---- 注解处理器 抽象类 AbstractProcessor 中的 getSupportedAnnotationTypes 方法 , 用于声明 注解处理器 要处理的注解类型 ; @...支持的 Java 版本 ---- 注解处理器 抽象类 AbstractProcessor 中的 getSupportedSourceVersion 方法 , 用于声明 该注解处理器 支持的 Java
查看@JSONField注解的源码可以了解到它的作用范围是在方法(METHOD)、属性(FIELD)、方法中的参数(PARAMETER)上。...2.注解作用在set、get方法之上 @JSONField(name="new_username") public String getUsername() { return...new_username,可以改变字段的名称,跟上面直接注解到属性上是一样的效果。...serialzeFeatures=SerializerFeature.WriteMapNullValue) private Date currentDate; 当然SerializerFeature类中还有很多其他的属性...6.使用ordinal指定字段顺序 缺省fastjson序列化一个java bean,是根据fieldName的字母序进行序列化的,你可以通过ordinal指定字段的顺序。
什么是APTAPT(Annotation Processing Tool)它是Java编译期注解处理器,它可以让开发人员在编译期对注解进行处理,通过APT可以获取到注解和被注解对象的相关信息,并根据这些信息在编译期按我们的需求生成...因此需要了解什么是注解,不过对于java开发人员来说,注解应该是耳熟能详了,这边就不再论述。...元素常用变量 更多element详细内容可以查看如下链接www.jianshu.com/p/899063e84…创建注解处理器步骤创建注解类创建一个继承自 AbstractProcessor 的类,这就是...APT 的核心类注册处理器创建注解处理器示例注: 示例要实现的功能,通过一个自定义注解AutoComponent,通过注解处理器扫描解析AutoComponent注解,并生成lybgeek.components...Java官方文档给出的注解处理过程的定义:注解处理过程是一个有序的循环过程。在每次循环中,一个处理器可能被要求去处理那些在上一次循环中产生的源文件和类文件中的注解。
什么是APTAPT(Annotation Processing Tool)它是Java编译期注解处理器,它可以让开发人员在编译期对注解进行处理,通过APT可以获取到注解和被注解对象的相关信息,并根据这些信息在编译期按我们的需求生成...因此需要了解什么是注解,不过对于java开发人员来说,注解应该是耳熟能详了,这边就不再论述。...的类,这就是 APT 的核心类 注册处理器创建注解处理器示例注: 示例要实现的功能,通过一个自定义注解AutoComponent,通过注解处理器扫描解析AutoComponent注解,并生成lybgeek.components...// Element操作类,用来处理Element的工具Elements elementUtils = processingEnv.getElementUtils();// 类信息工具类,用来处理TypeMirror...Java官方文档给出的注解处理过程的定义:注解处理过程是一个有序的循环过程。在每次循环中,一个处理器可能被要求去处理那些在上一次循环中产生的源文件和类文件中的注解。
前言 在 spring 容器中,允许通过名称或别名来获取 bean ,这个能力来自于顶层接口 AliasRegistry,分析类下属的关系图,可以看到,几乎所有主要容器都直接或间接的实现了 AliasRegistry...AliasRegistry 的结构非常简单,主要的类就是 AliasRegistry 接口与他的实现类 SimpleAliasRegistry,后续的实现类基本都直接或间接的继承了 SimpleAliasRegistry...] getAliases(String name); } 二、SimpleAliasRegistry SimpleAliasRegistry 是直接基于 AliasRegistry 接口提供的简单实现类,...be empty"); // 从这里开始加锁 synchronized (this.aliasMap) { // 1.若别名与原名称一致,则直接移除该别名,否则继续后续处理...= null) { // a.已对应的原名称和要对应的原名称相同,则放弃后续处理 if (registeredName.equals(name
Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat...指的是DecimalFormat类在Java.text包中....四丶Java中的大数处理类 Java.math.BigInteger 跟 Java.math.Decimat类 首先大数.什么是大数. 大数就是基本类型处理不下的数字. 举个简单的例子....此时我们的 BigInteger类 跟 Decimat类就是将我们上面所述的步骤给封装起来了 BigInteger类: 大数处理整数类. 不带小数....random类也可以使用这个公式. Random类中提供了方法让我们获取随机数. 4.大数处理类 BigInteger (大数整数处理) 以及 Decimat类.
在枚举类模板的扩展上也更加容易 */ } } 注解 Annotation 其实就是代码里的特殊标记, 这些标记可以在编译, 类加 载, 运行时被读取, 并执行相应的处理。...注解本质是一个接口和一组键值对,通过反射和代理实现某种行为。 【框架 = 注解 + 反射 + 设计模式。】...(最高权限) Object类 package java.lang; public class Object { private static native void registerNatives...getClass(); Class test02 = Class.forName("java.lang.String"); //抛异常 所有的类都继承Object,所以String.class返回类的实例...获取类的信息,调用类的属性及方法 package test; import java.lang.reflect.Field; import java.lang.reflect.Method; class
常见的注解 以下注解都是 Annotation 接口的实现 标注 说明 @Deprecated 所标注内容,不再被建议使用。 @Override 只能标注方法,表示该方法覆盖父类中的方法。...什么是注解 本质:注解名称对应一个注解类 语法:@注解名称(属性:属性值) 作用:校验、替代一些配置文件信息 解析:注解是由相关的框架来解析的,我们只使用即可 定义注解类 所有的注解都是Annotation...接口的实现类或之类 java.lang.annotation # Annotation 语法:@interface 注解名 @interface MyAnno1 { } 注解可以作用的目标 包...,给定义的注解添加注解,即 @Target,用来表明该注解可以用在一个过几个地方,有所限制 例如,下面的注解 @MyAnno1 注解由 @Target 指定,只能作用在类、方法、属性上 java.lang.Override.java...JVM中(RUNTIME):注解在源代码、字节码文件中存在,并且在JVM加载类时,会把注解加载到JVM内存中(它是唯一可反射注解! 关键关键关键!!!)
领取专属 10元无门槛券
手把手带您无忧上云