Spring Boot应用中spring-core的NonNull注解无依赖为何仍可运行?
问题解答
为啥没依赖也能正常跑?核心在注解的作用场景
- Spring的
@NonNull是个别名注解(靠@TypeQualifierNickname标记),它指向javax.annotation.Nonnull,但这玩意儿根本不是给程序运行时用的——它是给IDEA、SonarQube这类静态代码分析工具看的,用来帮你提前排查空指针问题。 - Java注解有不同的保留级别:Spring的
@NonNull用的是@Retention(CLASS),意思是编译后字节码里会保留它的信息,但JVM运行时不会主动去加载它关联的javax.annotation.Nonnull类。只有当你用反射代码去读取这个注解的元数据时,才会触发类加载,否则JVM根本不会管它。 - 你的应用运行时根本没代码去碰这个注解的关联信息,所以JVM不会尝试加载那个不存在的类,自然不会报错。
你的猜想完全正确
确实可以创建这种引用其他包注解的别名注解,而且不需要依赖原注解的库。这类注解的价值都体现在编译阶段或静态分析阶段,只要运行时没人去解析它的关联内容,缺依赖也不会出问题。
内容的提问来源于stack exchange,提问作者kulatamicuda
相关产品推荐
相关产品推荐

