没有注释的Java中的DI?

是否有任何方法(现有框架)在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仅用于组合根存在的最外层(入口)应用程序中。