注释辅助注射工厂

时间:2017-07-07 06:59:08

标签: java guice assisted-inject

没有AssistedInjection,我有以下

interface IA { ... }
class B implements IA { 
        B (String p)
}
class C implements IA { 
        C (String p)
}

interface IAFactory {
  IA create(String p)
}
class BFactory implements IAFactory { ... }
class CFactory implements IAFactory { ... }

但是要使用AssistedInjection,我需要

class UberFactory {
        B createB(@Assisted("stringB") String p)
        C createC(@Assisted("stringC") String p)
}

以及BC中的相应更改。

这有两个问题:

  1. 应用程序代码必须了解是否要致电createBcreateC
  2. UberFactory切断了我的包结构,以实例化IA
  3. 的实例

    在我看来,更直观的API将是:

    install(new FactoryModuleBuilder()
         .implement(IA.class, B.class)
         .annotatedWith(BFactoryQualifier.class)
         .build(IAFactory.class));
    install(new FactoryModuleBuilder()
         .implement(IA.class, C.class)
         .annotatedWith(CFactoryQualifier.class)
         .build(IAFactory.class));
    

    这样我就可以简单地注释我注入我的应用程序代码的IAFactory实例。

    但据我所知,没有这样的API。所以,

    1. 是否有一些我错过的东西导致这样的API不合理?
    2. 根据当前可用的功能,有没有办法估算这种行为?

0 个答案:

没有答案
相关问题