lombok-ex 编译时注解框架,性能完爆 AOP
lombok-ex
lombok-ex 是一款类似于 lombok 的编译时注解框架。
主要补充一些 lombok 没有实现,且自己会用到的常见工具。
编译时注解性能无任何损失,一个注解搞定一切,无三方依赖。
创作目的
补充 lombok 缺失的注解,便于日常开发使用。
lombok 的源码基本不可读,应该是加密处理了。
为其他注解相关框架提升性能提供基础,后期考虑替换为编译时注解。
特性
@Serial序列化@Util工具类@ToStringtoString@Sync同步@Modifiers修饰符
变更日志
快速开始
准备工作
jdk1.7+
maven 3.x+
- 编译器启用编译时注解功能。
 
如 idea 启用编译时注解,勾选【enable annotation process】
maven 引入
<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>lombok-ex</artifactId>
    <version>0.0.7</version>
    <scope>provided</scope>
</dependency>
- Gradle 引入方式
 
compile group: 'com.github.houbb', name: 'lombok-ex', version: '0.0.7'
@Serial 注解
- User.java
 
我们定义一个简单的 pojo,使用 @Serial
package com.github.houbb.lombok.test.model;
import com.github.houbb.lombok.ex.annotation.Serial;
@Serial
public class User {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
编译
直接使用 maven 命令编译
$   mvn clean install
编译结果
查看对应的 User.class 文件,内容如下:
package com.github.houbb.lombok.test.model;
import java.io.Serializable;
public class User implements Serializable {
    private static final Long serialVersionUID = 1L;
    private String name;
    public User() {
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
@Util 注解
注解使用
@Util
public class StringUtil {
    public static boolean isEmpty(final String string) {
        return null == string || "".equals(string);
    }
}
效果
public final class StringUtil {
    private StringUtil() {
    }
    public static boolean isEmpty(String string) {
        return null == string || "".equals(string);
    }
}
@ToString 注解
简介
@ToString 注解在类上使用,可以默认生成 toString() 方法
例子:
import com.github.houbb.lombok.ex.annotation.ToString;
@ToString
public class ToStringTest {
}
效果
编译后的 class 文件信息:
ps: 此处依赖 FastJSON,请自行引入。
import com.alibaba.fastjson.JSON;
public class ToStringTest {
    public ToStringTest() {
    }
    public String toString() {
        return JSON.toJSONString(this);
    }
}
@Sync 注解
使用
直接指定在方法上。
@Sync
public void syncTest() {
    System.out.println("sync");
}
效果
public synchronized void syncTest() {
    System.out.println("sync");
}
@Modifiers 注解
说明
@Modifiers 可修改类、方法、字段的访问级别。
暂时可能没有特别好的应用场景,取决于用户自己的使用。
注意:不要搞一些难以理解的东西,尽可能便于使用者理解。
使用方式
@Modifiers 还有一个 appendMode 属性,默认为 true。
如果设置为 false,可以直接将修饰符改为用户指定的。
import com.github.houbb.lombok.ex.annotation.Modifiers;
import com.github.houbb.lombok.ex.constant.Flags;
@Modifiers(Flags.FINAL)
public class ModifiersTest {
    @Modifiers(Flags.VOLATILE)
    private int value;
    @Modifiers(Flags.SYNCHRONIZED)
    public static void syncTest() {
        System.out.println("sync");
    }
}
效果
public final class ModifiersTest {
    private volatile int value;
    public ModifiersTest() {
    }
    public static synchronized void syncTest() {
        System.out.println("sync");
    }
}
开源地址
后期 Road-map
对于注解的开关配置以及编译优化
@AutoLog实现完善@Equals@HashCode@EqualsAndHashCode等内置方法重载@NotNull参数校验,可以单独一个项目 valid@Async异步执行 asyncbean-mapping, sensitive 等优化
AST 基础框架
思路:通过 AST 直接解析文本,然后通过 AST 结合 jdk utils 重新构建 class 文件。
原文链接
扫码关注一波~
lombok-ex 编译时注解框架,性能完爆 AOP的更多相关文章
- java 编译时注解框架 lombok-ex
		
lombok-ex lombok-ex 是一款类似于 lombok 的编译时注解框架. 编译时注,拥有运行时注解的便利性,和无任何损失的性能. 主要补充一些 lombok 没有实现,且自己会用到的常见 ...
 - Android 打造编译时注解解析框架   这只是一个开始
		
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43452969 ,本文出自:[张鸿洋的博客] 1.概述 记得很久以前,写过几篇博客 ...
 - Android 编译时注解解析框架
		
2.注解 说道注解,竟然还有各种分类,得,这记不住,我们从注解的作用来反推其分类,帮助大家记忆,然后举例强化大家的记忆,话说注解的作用: 1.标记一些信息,这么说可能太抽象,那么我说,你见过@Over ...
 - 使用编译时注解简单实现类似 ButterKnife 的效果
		
这篇文章是学习鸿洋前辈的 Android 如何编写基于编译时注解的项目 的笔记,用于记录我的学习收获. 读完本文你将了解: 什么是编译时注解 APT 编译时注解如何使用与编写 举个例子 思路 创建注解 ...
 - 利用APT实现Android编译时注解
		
摘要: 一.APT概述 我们在前面的java注解详解一文中已经讲过,可以在运行时利用反射机制运行处理注解.其实,我们还可以在编译时处理注解,这就是不得不说官方为我们提供的注解处理工具APT (Anno ...
 - Kotlin编译时注解,简单实现ButterKnife
		
ButterKnife在之前的Android开发中还是比较热门的工具,帮助Android开发者减少代码编写,而且看起来更加的舒适,于是简单实现一下ButterKnife,相信把下面的代码都搞懂,看Bu ...
 - libgo协程库:网络性能完爆ASIO异步模型(-O3测试)
		
在purecpp社区的github组织中有一个协程库:https://github.com/yyzybb537/libgo 近日有用户找到我,想要了解一下libgo库在网络方面的性能,于是选取已入选标 ...
 - lombok编译时注解@Slf4j的使用及相关依赖包
		
slf4j是一个日志门面模式的框架,只对调用者开放少量接口用于记录日志 主要接口方法有 debug warn info error trace 在idea中可以引入lombok框架,使用@Slf4j注 ...
 - 使用lombok.Data编译时无法找到get/set方法
		
我的IDEA版本是2019.2 在使用IDEA创建了一个SpringBoot项目,其中一个实体类使用了@Data注解,但是在Service中调用的时候找不到get/set方法. 检查步骤: 1.在St ...
 - apt 根据注解,编译时生成代码
		
apt: @Retention后面的值,设置的为CLASS,说明就是编译时动态处理的.一般这类注解会在编译的时候,根据注解标识,动态生成一些类或者生成一些xml都可以,在运行时期,这类注解是没有的~~ ...
 
随机推荐
- 最近遇到的问题记录:UrlEncode、UrlDecode
			
本文阅读前了解知识:什么时候需要使用UrlEncode和UrlDecode函数 作者使用谷歌浏览器,通过按下F12对第三方网站http协议的接口抓包进行分析操作. 场景 运维小哥哥偶尔使用某某外包公司 ...
 - 在虚拟机(Linux)中Docker中部署Nginx成功,但是在宿主机无法访问Nginx站点?
			
1.问题 本文是基于黑马程序员Docker基础--常见命令一课中部署Nginx时遇到的问题作出解答. 在虚拟机(Linux)中Docker中部署Nginx成功,但是在宿主机无法访问Nginx站点 如图 ...
 - Go-值传递&引用传递
			
值类型和引用类型 值类型关注其值 引用类型关注其指针 值类型和引用类型区别在于传递值的时候拷贝的对象不同,值传递拷贝是变量的值,引用传递拷贝的是变量的指针 拷贝 -- 传递值 赋值 函数调用 初始化 ...
 - OB指定开源版本MySQL模式单节点安装
			
OB指定开源版本MySQL模式单节点安装 yum源处理 yum install -y yum-utils yum-config-manager --add-repo https://mirrors.a ...
 - [转帖]一文说清 Linux System Load
			
https://zhuanlan.zhihu.com/p/447661302 双十一压测过程中,常见的问题之一就是load 飙高,通常这个时候业务上都有受影响,比如服务rt飙高,比如机器无法登录,比如 ...
 - [转帖]关系模型到 Key-Value 模型的映射
			
https://cn.pingcap.com/blog/tidb-internal-2 在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以 ...
 - [转帖]MioIO读/写性能测试
			
https://www.jianshu.com/p/a0a84f91b16f image.png COSBench是Intel团队基于java开发,是一个测试云对象存储系统的分布式基准测试工具,全 ...
 - [转帖]「更易用的OceanBase」|OceanBase 4.0 一体化安装包 - 把简单留给用户
			
https://www.modb.pro/db/565842 1. OceanBase 3.x 版本安装浅谈 我是在 OceanBase 3.1.4 版本的时候开始尝试入手测试的.刚开始 OB 3.x ...
 - MySQL新增数据,修改数据,删除数据
			
连接本地mysql语句 mysql -hlocalhost -uroot -proot DML-介绍 DML英文全称是:用来对数据库中表的数据记录进行 增 删 改 操作. 增加使用 insert 删除 ...
 - echarts多条折线图hover的时候添加单位
			
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...