JVM何时加载注释类

时间:2016-02-18 07:07:17

标签: java annotations jvm classloader

我发现如果我使用注释,程序将不会抛出ClassNotFoundException

class A {
        @Transactional
        public void insert() {
            //insert something
        }
    }

Tomcat 在没有 javaee-api-7.0.jar 的情况下成功启动,其中包含类javax.transaction.Transactional

这让我非常困惑,不应该JVM抛出一个 加载班级ClassNotFoundException后的A

1 个答案:

答案 0 :(得分:5)

不,它不应该。注释只是元数据。即使注释不在类路径中,预计包含注释的字节代码也能正常运行。当然,如果某些库试图实际访问并使用不在类路径中的注释,那么它将无法工作。

这是明确支持的,以便能够,例如

  • 添加字节码静态分析工具(如FindBugs)使用的注释,在生产中运行代码时没有用
  • 能够在客户端中使用分离的JPA实体,即使服务器是唯一实际使用JPA注释的实体