【发布时间】:2014-04-22 16:32:13
【问题描述】:
在我的应用程序(独立的 apache camel)中,我必须绑定几个 bean(pojos 的实例)。 因为这些pojos不能直接使用(在java中),但必须通过url中的绑定引用来使用,所以我想在一个枚举中“注册”所有可用的bean。然后像这样绑定 bean:
public class BeanRegistry extends JndiRegistry {
public BeanRegistry() {
for (Beans bean : Beans.values()) {
try {
this.bind(bean.name(), bean.clazz().newInstance());
} catch (InstantiationException | IllegalAccessException e) {
throw new IllegalStateException("Problem on instantiating bean " + bean.name() + " with type "
+ bean.clazz().getName() + ", cause Exception: ", e);
}
}
}
public static enum Beans {
sorter(SortingStrategy.class),
policy(PolicyForStartAndStopRoutes.class),
doneFilter(ExcludeDoneFilesFilter.class);
private final Class<?> clazz;
Beans(Class<?> clazz) {
this.clazz = clazz;
}
public Class<?> clazz() {
return clazz;
}
}
}
只要您使用枚举的名称来引用 bean,就不会发生拼写错误。
我的问题是bean.clazz().newInstance()。有没有办法使用 guice 来“提供”实例?使用 guice,我可以将实例绑定到任意构造函数或“实现”。
【问题讨论】:
标签: dependency-injection guice