gpt4 book ai didi

java - 从应用程序上下文中获取 bean 类型列表

转载 作者:行者123 更新时间:2023-11-30 06:50:32 24 4
gpt4 key购买 nike

我有兴趣从 Spring ApplicationContext 获取 bean 列表。特别是,这些是 Ordered beans

 @Component
@Order(value=2)

我在一些未启用 Spring 的遗留代码中,因此我创建了一个获取 ApplicationContext 的方法。对于 spring bean,我知道我可以做类似的事情:

@Bean
public SomeType someType(List<OtherType> otherTypes) {
SomeType someType = new SomeType(otherTypes);
return someType;
}

但是 ApplicationContext 只提供了一个返回无序映射的方法 getBeansOfType。我试过 getBeanNames(type) 但它也返回无序的东西。

我唯一能想到的是创建一个仅包含列表的虚拟类,为该虚拟类创建一个 bean 并检索有序列表:

public class DumbOtherTypeCollection {
private final List<OtherType) otherTypes;
public DumbOtherTypeCollection(List<OtherType) otherTypes) {
this.otherTypes = otherTypes;
}

List<OtherType> getOrderedOtherTypes() { return otherTypes; }
}

@Bean
DumbOtherTypeCollection wasteOfTimeReally(List<OtherType otherTypes) {
return new DumbOtherTypeCollection(otherTypes);
}

....

applicationContext.getBean(DumbOtherTypeCollection.class).getOrderedOtherTypes();

只是希望我能做得更好。

最佳答案

Spring 可以将一个类型的所有 bean Autowiring 到列表中。除此之外,如果你的 bean 被注释为 @Ordered 或者如果 bean 实现了 Ordered 接口(interface),那么这个列表将包含所有的 beans。(Spring reference)

@Autowired 文档:

In case of a Collection or Map dependency type, the container will autowire all beans matching the declared value type.

@Autowired
List<MyType> beans;

编辑:使用内置的 OrderComparator 进行排序

对于您的外部上下文调用,为了让您的 bean 按顺序排列优先级,您可以使用内置比较器:

org.springframework.core.annotation.AnnotationAwareOrderComparator(new ArrayList(applicationContext.getBeansOfType(...).values()));

或者

Collections.sort((List<Object>)applicationContext.getBeansOfType(...).values(),org.springframework.core.annotation.AnnotationAwareOrderComparator.INSTANCE);

关于java - 从应用程序上下文中获取 bean 类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41289887/

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