spring - 为什么 basePackageClasses (@ComponentScan) "Type-Safe"?

标签 spring spring-annotations

有人可以帮助解释这种情况下类型安全的含义吗?

我对 Javadoc 的理解不太清楚 - https://docs.spring.io/spring-framework/docs/3.1.4.RELEASE/javadoc-api/org/springframework/context/annotation/ComponentScan.html#basePackages()

最佳答案

public @interface ComponentScan {
  
  String[] basePackages() default {};
  Class<?>[] basePackageClasses() default {};
 
}

这意味着 basePackagesbasePackageClasses 提供相同的功能,但 basePackageClasses 具有类型安全的优势。

类型安全的优点可以帮助您在真正执行应用程序之前知道您是否真的将该值配置为正确的类型,主要是因为如果您配置的值不正确,编译器将不会让您编译,因此您无法执行应用程序。所以我们说类型安全可以帮助在编译时而不是运行时检测错误。

回到这个例子,由于basePackages类型是String,你可以将它配置为任何值,即使它是一个无效的包名,你仍然可以编译和执行但当尝试扫描包中的组件时,它会抛出异常,因为它们无效。

但是由于 basePackageClasses 的类型是 Class ,如果将其配置为无效的包名,将会编译失败,并且无法执行应用程序。因此,在真正执行应用程序之前检查您配置的包是否确实有效是有帮助的。

关于spring - 为什么 basePackageClasses (@ComponentScan) "Type-Safe"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70916248/

相关文章:

java - Spring 数据 REST : "no String-argument constructor/factory method to deserialize from String value"

java - Hibernate validator 不适用于 Spring

java - Spring Boot 项目中的 application.properties 文件在哪里?

java - Hibernate 不保存对象,即使在日志中没有收到任何错误

java - 如何拆分类以使用多个@Controller

java - 如何将名称生成器添加到上下文 :component-scan in annotation form?

java - 跨 Java 包 Autowiring Spring Beans

spring - 有没有办法在 Spring Security 4.x 上禁用默认的 "/login"?

hibernate - 在 postgres db 中使用 hibernate-spring 插入记录。序列生成器问题

Spring MVC - HTTP 状态代码 400(错误请求),缺少定义为不需要的字段