interface Basic { void foo(); }
interface Extended extends Basic { void bar(); }
class BasicService {
@Inject
List<Basic> basics;
void execute() {
basics.forEach(Basic::foo);
}
}
class ExtendedService {
@Inject
List<Extended> extendeds;
void execute() {
extendeds.forEach(Extended::bar);
}
}
@Configuration
class MyConfiguration {
// Assume, that Basic1 and Basic2 are implementations of Basic and
// Extended1 is an implementation of Extended
@Bean
public Basic basic1() {
return new Basic1();
}
@Bean
public Basic basic2() {
return new Basic2();
}
@Bean
public List<Extended> extendeds() {
return Arrays.asList(new Extended1("0"), new Extended1("1"), new Extended1("2"));
}
@Bean
public BasicService basicService() {
return new BasicService();
}
@Bean
public ExtendedService extendedService() {
return new ExtendedService();
}
}
我不确定是否有一种方法可以隐式地解决这个问题,因为Spring试图找到最佳匹配,而List bean似乎就是这样(您是否尝试过泛型,例如List<?extends basic>
?)。
但是您可以通过从ApplicationContext中获取bean定义,以编程方式进行:
public BasicService(@Inject ApplicationContext ctx) {
Map<String, ? extends Basic> basicMap = ctx.getBeansOfType(Basic.class);
Map<String, Collection<? extends Basic>> basicCollectionMap = ctx.getBeansofType(ResolvableType.forClassWithGenerics(Collection.class, Basic.class));
// Now merge
Collection<? extends Basic> basics = basicMap.values();
basicCollectionMap.values().stream().map(l -> basics.addAll(l));
}
我只是在这里输入了这个,所以我希望没有任何明显的错误。
我有一个Spring bean,在Spring Bean中我有一个对其他bean列表的依赖项。我的问题是:如何注入一个通用的bean列表作为该bean的依赖项? 例如,一些代码: 我的豆子: 问题是:;如何在Painter中获得颜色列表?另外,还有一点:我应该让@Configuration返回接口类型还是类? 谢谢你的帮助!
我有两节课 还有一个雇员类 在我的控制器中,我从服务层检索数据,并尝试填充部门。这就是我的控制器的样子。 过去,如果我使用new关键字为CDI管理的bean构造实例,我会遇到麻烦。我可以使用new创建一个ArrayList,使用new构造Employee实例,将它们添加到列表中,然后在departmentbean中设置列表。有人能告诉我在ManagedBean部门填充员工(ManagedBean)
Spring在这里需要一些帮助。在我们的项目中,我们使用XML和注释配置(Spring 4.1) 最近我遇到了以下任务: 我有一个范围原型的bean列表,它们都实现了相同的接口。 此外,我有一个单独的bean,它有< code>execute方法。在方法内部,bean应该访问这些原型bean的列表。 每次执行“execute”方法时,我都想访问这些原型bean的不同实例)。在singleton中,
问题内容: 我有一个代码: 我期望一旦启动应用程序BeanSample.getSomeBean(),然后SomeBean将开始由“ someBean”提供。 现在我有一个错误: 没有定义名为“ someBean”的bean 实际上,我有点不明白应该使用哪个应用程序上下文来提取我的豆子? 关于@Configuration : 有什么原因,为什么我应该在这里使用@Configuration注释?(通过
我有一个属性类: 我在@Configuration类中启用配置属性,如下所示: 在同一个类(“SomeAutoConfiguration”)中,我想创建另一个bean,具体取决于SomeProperties中的list属性是否为空。我想我可以将@ConditionalExpression与以下SpEl结合使用: SpEl是正确的,但我无法获得包含我的属性的bean。使用上面的表达式,我遇到了 EL
问题内容: 我有一个会话范围的bean 我在一个过滤器中注入了对象… 但是,我在下一次交互中融合了SessionBean … 但是该属性返回null 我通过CDI注释更改了导入,但仍然无法使用(),与JSF注释(和)相同。 谢谢。 PD:对不起,我的英语! 问题答案: 您不能将用于JSF和CDI的这两个包中的注释混合在一起。两者都反映了不同的注入机制,因此不能在同一bean上混合使用。您必须从同一