有人可以帮助解释这种情况下类型安全的含义吗?
我对 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 {};
}
这意味着 basePackages
和 basePackageClasses
提供相同的功能,但 basePackageClasses
具有类型安全的优势。
类型安全的优点可以帮助您在真正执行应用程序之前知道您是否真的将该值配置为正确的类型,主要是因为如果您配置的值不正确,编译器将不会让您编译,因此您无法执行应用程序。所以我们说类型安全可以帮助在编译时而不是运行时检测错误。
回到这个例子,由于basePackages
类型是String
,你可以将它配置为任何值,即使它是一个无效的包名,你仍然可以编译和执行但当尝试扫描包中的组件时,它会抛出异常,因为它们无效。
但是由于 basePackageClasses
的类型是 Class
,如果将其配置为无效的包名,将会编译失败,并且无法执行应用程序。因此,在真正执行应用程序之前检查您配置的包是否确实有效是有帮助的。
关于spring - 为什么 basePackageClasses (@ComponentScan) "Type-Safe"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70916248/