gpt4 book ai didi

java - 通过某些组件名称模式将组件/类加载到 ArrayList 中

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:35 24 4
gpt4 key购买 nike

我有许多相同类型的类(com.project.abc.abs.Agent),注释如下;

@Component("WEB.Agent-1")、@Component("WEB.Agent-2")、@Component("WEB.Agent-3")...等。现在假设所有类都在同一个包中 (com.project.abc.web.Agent1...)。

这些类都是单例,我想将它们动态加载到中央“代理管理器”类中。 IE。每次使用 @Component("WEB.Agent-#") 注释添加新的代理类时,都会拾取该类,而无需对代理管理器进行更改。在 AgentManager 类中,我需要某种方法来加载与名称“WEB.Agent-#”(其中 # 是数字或某个唯一 ID)匹配的任何组件,这可以使用 Spring 中的任何方法吗?

如果不是,我假设我需要从特定文件夹/包加载所有类?

最佳答案

您可以使用ClassPathScanningCandidateComponentProvider来做到这一点并添加一个排除过滤器来删除与您的模式不匹配的内容:

ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider();

scanner.addIncludeFilter(new AnnotationTypeFilter(Component.class));
scanner.addExcludeFilter(new TypeFilter(){
public boolean match(MetadataReader metadataReader,
MetadataReaderFactory metadataReaderFactory){
return metadataReader.getAnnotationMetadata()
.getAnnotationAttributes(Component.class.getName())
.get("value").matches("WEB.Agent-[0-9]+");
}
});

for (BeanDefinition bd : scanner.findCandidateComponents("com.project.abc.web.Agent1"))
System.out.println(bd.getBeanClassName());

关于java - 通过某些组件名称模式将组件/类加载到 ArrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7626368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com