簡體   English   中英

使用Spring,如何獲取具有特定實例的類的列表?

[英]With Spring, how do I get a list of classes having a particular instance?

我嘗試使用BeanPostProcessor

@Override
    public Object postProcessBeforeInitialization(final Object bean, final String beanName) throws BeansException
    {
        log.info("postProcessBeforeInitialization bean : " + beanName);
        if (bean instanceof TestAware)
        {
            testaware.add(((TestAware) bean).getClass());
            log.info("Added testAware bean : " + beanName);
        }
        return bean;
    }

但是問題是,有些類沒有bean定義。 有沒有其他替代或改進的方法來獲得。 提前致謝。

假設您要詢問如何查找TestAware子類型

顧名思義, BeanPostProcessor僅從doc “處理” spring托管的bean:

工廠掛鈎,允許自定義修改新的bean實例

因此,您在這里使用了錯誤的工具。 您可能應該使用一些反射來做您想要的事情,例如,使用Reflections

// adapted from the home page sample
Reflections reflections = new Reflections("your.package");
Set<Class<? extends TestAware>> testAwares = reflections.getSubTypesOf(TestAware.class);

注意:以上示例代碼將為您提供子類型,而不是子類型的實例。

如果要在應用程序上下文中獲取子類型的所有實例,那么查看它們就足夠簡單了:

@Component
public class GetSubtypesOfClass implements ApplicationContextAware {

@Override
    public void setApplicationContext(ApplicationContext ac) throws BeansException {
        List<Subtype> matches = new ArrayList<>();
        for (String s : ac.getBeanDefinitionNames()) {
            Object bean = ac.getBean(s);
            if (Subtype.class.isAssignableFrom(bean.getClass())) {
                matches.add(bean);
            }
        }
    }
}

但是,如果您想知道為什么子類型的實例在應用程序上下文中不可用,那么您將需要在上下文xml中顯式加載它們,或者通過類路徑掃描隱式加載它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM