Java 使用Guice自动绑定所有“服务”

Java 使用Guice自动绑定所有“服务”,java,c#,guice,Java,C#,Guice,在.Net中编写了7年代码后,我最近开始使用Java,别误会,我喜欢C#,但这项工作要求我改变 我的问题是关于Ioc注册的,在C#中我使用了Windsor和SimpleInjector(我非常喜欢),在java中我想开始使用Guice 我正在进行的项目是一个遗留项目,不使用Ioc,比如说,它是一个泽西岛项目(具有非功能性HK2 Ioc) 现在我的问题是,在C#上,我已经使用反射在运行时启动应用程序时注册了所有接口和具体实现 我已经阅读了Guice文档,但找不到任何这样做的示例,而且JIT绑定还没

在.Net中编写了7年代码后,我最近开始使用Java,别误会,我喜欢C#,但这项工作要求我改变

我的问题是关于Ioc注册的,在C#中我使用了Windsor和SimpleInjector(我非常喜欢),在java中我想开始使用Guice

我正在进行的项目是一个遗留项目,不使用Ioc,比如说,它是一个泽西岛项目(具有非功能性HK2 Ioc)

现在我的问题是,在C#上,我已经使用反射在运行时启动应用程序时注册了所有接口和具体实现

我已经阅读了Guice文档,但找不到任何这样做的示例,而且JIT绑定还没有真正理解

那么,有可能这样做吗?这是最佳实践吗?(我不认为手动编写所有绑定是正确的做法)

任何例子或指导都会非常有用


谢谢

这在Java和Guice中比在其他平台上更难做到:Java类加载器的设计目的不仅仅是枚举类路径上的每个类或实现。尽管有些库解决方案在规定的条件下(例如,or)实现后者,但通常不可能通过当前类加载器及其父类迭代每个可用类,因为理论上通过基于网络的类加载器和类似类加载器的集合是无限的

这使得无论是否使用Guice,显式地列出要向应用程序公开的接口和实现是常见的,而且通常是必要的

见:


因此,很难完成“启动每个实现MyStartableService的可访问类”之类的任务,尽管通过“在返回之前启动每个通过Guice请求的MyStartableService”可能会更幸运。或者,您也可以使用Java的内置Java 6(例如)来允许适当服务的分片或分布式列表,然后可以通过调用模块中的
bind
将这些列表提供给Guice。(Olivier在评论中很贴切地建议,这使得生成PowerServiceLoader提供的元数据文件变得很容易。)

如果你采用SPI框架的方式,试着使用谷歌的:这是一个救命软件:你不接触任何非java文件,只需添加一个小注释,一切都会自动完成。谢谢你的详细回答,我试着理解下一步该怎么做你是说一个没有功能的Hk2。Hk2相当实用。。。Hk2还有一个强大的框架,用于使用@service和ServiceLocator自动注册服务populators@jwells131313,我的意思是我们系统中的HK2无法运行。