首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等效于CDI JavaEE 7的@Configurable

等效于CDI JavaEE 7的@Configurable
EN

Stack Overflow用户
提问于 2017-06-12 08:05:44
回答 1查看 167关注 0票数 2

目前我对CDI有一个很大的问题,我想通过他们的烦恼来创建一个新的对象。

通过反思,我让所有的类都被“@Connector”套牢了。之后,我为每个类创建一个新对象。这很好,但是我想将一个ServiceHandler注入到试图通过@ inject注入它的对象中。这里的问题是CDI不知道这些对象,也无法注入它们。目前我有一个解决办法来解决这个问题,但这并不是真的漂亮。我对CDI很陌生,我正在寻找与Spring '@Configurable‘注释相当的注释。

代码语言:javascript
复制
private Set<ApiDao> determineApiDaos() {
Set<Class<?>> classes = new Reflections("###packageName###").getTypesAnnotatedWith(Connector.class);
return FluentIterable.from(classes)
    .transform(CLASS_TO_API_DAO_FUNCTION)
    .filter(Predicates.notNull())
    .toSet(); 
}

private ApiDao instantiateApiDao(Class apiDao) {
try {
  ApiDao newApiDao = (ApiDao) apiDao.newInstance();
  newApiDao.setConfigurationService(configurationService); // Workaround inject service during creation
  return newApiDao;
} catch (Exception e) {
  LOG.error("Could not initialize Connector.", e);
  return null;
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-13 16:05:32

你的问题很广泛。我的答案也是如此。

首先,在使用Java时,不要试图模仿Spring。阅读CDI规范是很有用的。

如果我正确理解了您的问题,那么您有一个CDI不知道的类,但是您希望CDI注入它。这在CDI中很容易解决。事实上,比使用Spring更容易。使用生产者

代码语言:javascript
复制
public class ConfigurationServiceProducer{

 @Produces
 public ConfigurationService produceConfigurationService(){
  //Instantiate and return the ConfigurationService accordingly.
  return new ConfigurationService();
 }
}

如果需要,还可以使用限定符将bean类型区分为ConfigurationService。如果需要在producer方法中更深入地检查注入点,可以将InjectionPoint作为参数传递给producer方法。

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

https://stackoverflow.com/questions/44494349

复制
相关文章

相似问题

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