首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >泛型类型的Spring连接动态bean

泛型类型的Spring连接动态bean
EN

Stack Overflow用户
提问于 2018-04-20 08:37:17
回答 1查看 809关注 0票数 2

使用Spring5.0.3使用BeanDefinitionRegistryPostProcessor注册动态bean。代码如下所示:

代码语言:javascript
复制
class MyBDRRPP implements BeanDefinitionRegistryPostProcessor {

   public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
     // values - hardcoded for now
     List<String> values = Arrays.asList("1", "22", "333");
     registry.registerBeanDefinition("myDynamicBean", 
        BeanDefinitionBuilder.genericBeanDefinition(List.class, () -> values);
   }
}

// Register MyBDRRPP with ApplicationContext - not shown here

// Consumer of the dynamic bean
class MyConsumer {

   MyConsumer(@Qualifier("myDynamicBean") List<String> data) {
      // do something with data
   }
}

当MyConsumer类被连接时,我会得到这个异常

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.List<java.lang.String>' available: expected at least 1 bean which qualifies as autowire candidate.

如果我将构造函数改为使用raw列表类型,它将正常工作(没有连接问题)。

代码语言:javascript
复制
MyConsumer(@Qualifier("myDynamicBean") List data) {
   // this works
}

我应该如何注册我的动态bean,以便我可以使用泛型类型?有没有办法在注册bean时向Spring提供一些有关类型的提示?

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 04:30:46

这就是我是如何做到这一点的:

代码语言:javascript
复制
class MyBDRRPP implements BeanDefinitionRegistryPostProcessor {

   public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
     // values - hardcoded for now
     List<String> values = Arrays.asList("1", "22", "333");

     // OLD Code  
     // registry.registerBeanDefinition("myDynamicBean", BeanDefinitionBuilder.genericBeanDefinition(List.class, () -> values);

     // New Code
     RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(List.class, () -> values);
     // Add the generic info
     rootBeanDefinition.setTargetType(ResolvableType.forClassWithGenerics(List.class, String.class));
     registry.registerBeanDefinition("myDynamicBean", rootBeanDefinition);  
   }
}

这现在可以在MyConsumer类中正确连接。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49932184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档