JVM什么时候加载注解class
When does the JVM load the annotation class
我发现如果我使用注释,程序不会抛出 ClassNotFoundException
。
class A {
@Transactional
public void insert() {
//insert something
}
}
Tomcat 在没有 javaee-api-7.0.jar 的情况下成功启动包含 class javax.transaction.Transactional
这让我很困惑,JVM 不应该抛出一个
ClassNotFoundException
当它加载 class A
?
不,不应该。注释只是元数据。预期包含注释的字节码可以正常运行,即使注释不在类路径中也是如此。当然,如果某些库试图实际访问和使用不在类路径中的注释,那是行不通的。
这是明确支持的,例如
- 添加由字节码静态分析工具(如 FindBugs)使用的注释,这些注释在 运行 生产代码
时没有用
- 能够在客户端中使用分离的 JPA 实体,即使服务器是唯一实际使用 JPA 注释的实体
我发现如果我使用注释,程序不会抛出 ClassNotFoundException
。
class A {
@Transactional
public void insert() {
//insert something
}
}
Tomcat 在没有 javaee-api-7.0.jar 的情况下成功启动包含 class javax.transaction.Transactional
这让我很困惑,JVM 不应该抛出一个
ClassNotFoundException
当它加载 class A
?
不,不应该。注释只是元数据。预期包含注释的字节码可以正常运行,即使注释不在类路径中也是如此。当然,如果某些库试图实际访问和使用不在类路径中的注释,那是行不通的。
这是明确支持的,例如
- 添加由字节码静态分析工具(如 FindBugs)使用的注释,这些注释在 运行 生产代码 时没有用
- 能够在客户端中使用分离的 JPA 实体,即使服务器是唯一实际使用 JPA 注释的实体