java的字节码工具-javassist体验三

这篇还是javassist的一些使用小技巧,我们可以用javassist来读取java的注解信息
首先我们有这样一个注解

1
2
3
4
public @interface Author {
String name();
int year();
}

注解可以打在类上,那么我们建一个point类

1
2
3
4
@Author(name = "nick", year = 2024)
public class Point {
int x, y;
}

name 是 nick,24年的,

然后我想通过javassist来获取这个类上的注解信息
我们先从对象池中获取这个类

1
CtClass cc = ClassPool.getDefault().get("org.example.Point");

然后获取类上的注解

1
2
Object[] all = cc.getAnnotations();
Author a = (Author)all[0];

将第一个注解强转成Author,因为这里我们知道是只有这个注解,否则可以做的更通用一点
然后把这个主机上的值获取出来

1
2
3
String name = a.name();
int year = a.year();
System.out.println("name: " + name + ", year: " + year);

可以获得结果,非常简单

1
2
3
name: nick, year: 2024

Process finished with exit code 0

为什么讲这么个简单的例子呢,因为这个刚好可以作为一种实现aop的途径,我们可以获取类的信息,包括注解上的,这样我们就可以从源头去理解这些aop啥的可以通过什么方法来实现