好的,所以我想使用 aClassPathScanningCandidateComponentProvider
来查找具有使用自定义注释注释的方法的组件。
我以前做过类似的。但是,这一次,我在一个应用程序正在使用的库中,我无法对包名称做出任何假设。
特别是,分别注释的类可能在我正在使用的库和使用它的应用程序中。
IE
object AnnotatedClassesFinder {
@JvmStatic
fun <A : Annotation> findClassesAnnotated(annotationClass: Class<A>): Collection<Class<*>> {
return createScanner(annotationClass)
.findCandidateComponents("com.app.my") //<-- need to find this constant (may be multiple)
.map(BeanDefinition::getBeanClassName)
.map { Class.forName(it) }
}
private fun <A : Annotation> createScanner(annotationClass: Class<A>): ClassPathScanningCandidateComponentProvider {
return ClassPathScanningCandidateComponentProvider(false).apply {
addIncludeFilter(AnnotationTypeFilter(annotationClass))
}
}
}
如何获取 Spring 当前用于其组件扫描的所有基本包?