没有注释的Java中的DI?

时间:2018-03-29 13:35:31

标签: java spring dependency-injection

有没有办法(现有的框架)在Java中配置DI而不必在他们“不属于”的类中添加注释?

在我的研究中,看起来要完成构造函数注入,我们需要在构造函数中添加一些注释,如下所示:

@Inject // or @Autowired for Spring Boot
public MyInjectedClass(IThing1 thing1, IThing2 thing2) { ... }

Spring Boot还建议将@Service添加到实现中,以便将它们注册到DI进行注入。

添加这些注释会将DI带入注入的类(MyInjectedClass以及任何控制器,服务实现等)。那些类应该没有DI的概念,它们应该只是给出构造函数中他们要求的东西而不关心他们是如何那里。

我知道你可以在Spring Boot中使用@Configuration属性,但这仍然感觉不是很可配置或强大。有没有办法使用没有注释的Java来实现这一点?例如。喜欢SimpleInjector,AutoFac等在C#中的工作方式? (通过代码配置,而不是XML或配置文件,而不是通过注释。)

如果没有,我很好奇为什么在DI和C#之间采用了这种不同的方法。

更新我在评论中冒犯了某人,但这根本不是我的意图。我问一个合理的问题。让我以另一种方式强调我的关注/问题。

假设我有以下包/类。我已经标记了每种类型的DI都会出现的情况。 “出现”是指这些标记的类/包与正在使用的DI框架有一些关系。

  

[A] :基于注释的DI(第三方软件包依赖项)

     

[C] :基于配置的DI

  • data_access [A]

    • 存储库
      • PersonRepository [A]
  • 逻辑 [A]

      • CreatePersonCommandHandler [A]
      • UpdatePersonCommandHandler [A]
  • 服务 [A] [C]

    • 控制器
      • PersonController [A] [C]

我希望这有助于说明我的真实问题。基于注释的DI的占用空间延伸到堆栈的远端,而基于配置的DI仅用于组合根存在的最外层(入口)应用程序。

0 个答案:

没有答案