草庐IT

java - 使用 google-guice 注入(inject)列表的最佳方法是什么?

我有三个类(class)CircleBuilder,SquareBuilder,和TriangleBuilder实现ShapeBuilder界面。我需要初始化我的FormBuilder尤其是BuilderList(扩展List)每个类的一个实例与google-guice。什么是最好的方法?我知道提供者方法和类似这样的东西:@ProvidesFormBuilderprovideFormBuilder(){DatabaseTransactionLoginstance=newFormBuilder();ShapeBuilderbuilder=null;builder=newCircleBui

java - Guice:Singleton.class 和@Singleton 的区别

在Guice中,有什么区别://InsideyourAbstractModulesubclass:@Overridepublicvoidconfigure(){bind(Service.class).to(ServiceImpl.class).in(Singleton.class);}和:@Overridepublicvoidconfigure(){bind(Service.class).to(ServiceImpl.class);}@Provides@SingletonpublicServiceImplprovidesService(){returnnewServiceImpl();

java - 在 Guice 中模仿 Spring 配置文件

在Spring中,如果我想要一组对象用于生产,另一组用于本地开发/测试。我可以使用@Profile注释来指定不同的类,并在启动应用程序时通过提供系统属性在它们之间切换。Guice中是否有类似的东西,或者我是否需要自己手动检查某些属性并在引导我的Injector时加载一组不同的模块? 最佳答案 您需要自己识别环境,并选择要在哪个环境中应用哪些模块,但您可以访问Modules.override专门覆盖某些绑定(bind),而不必创建大量模块变体。明智地使用它-如果您重写许多绑定(bind)或在不可预知的地方,很容易让您的模块困惑。

java - Guice 辅助注入(inject)更深的依赖层次结构

我想执行一系列处理元素并通过Guice将它们连接在一起。让我们假设以下路径:interfaceA由classAImpl实现需要一些输入interfaceB由classBImpl实现需要A接口(interface)C由类CImpl实现需要B接口(interface)D由类DImpl实现需要CA的依赖只能在运行时解决,不能在配置时解决。通常的方法是在这种情况下使用辅助注入(inject)来创建一个工厂,它将丢失的实例作为参数,就像这样:publicinterfaceAFactory{publicAcreateA(Stringinput);}但我真正想要的是这样的:publicinterfa

java - Guice:场注入(inject)的影响

我对Guice的理解是:构造函数级注入(inject)(@InjectpublicclassWidget(Depone,Deptwo))暗示每次通过Injector调用时,Guice总是注入(inject)该构造函数;和方法级注入(inject)(@InjectpublicvoidsetDepOne(Depone))暗示只要Widget被调用,Guice总是会注入(inject)该方法。对象是使用Guice创建的Injector这两个假设是否正确?如果不是,请澄清!所以我挂断的是:字段级注入(inject)的含义是什么?@InjectprivateDepone;这是否意味着当通过Gui

java - 在 Guice 中注入(inject)对象数组

我想在Guice中实现类似于以下的东西:publicMyClass{privatefinalInjectedObject[]injectedObjects;@InjectpublicMyClass(InjectedObject[]injectedObjects){this.injectedObjects=injectedObjects;}}即我希望能够创建一个对象的一定数量的实例,并将它们作为数组注入(inject)到另一个对象中。我或许可以这样做:publicMyClass{privatefinalInjectedObject[]injectedObjects;@Injectpubl

java - Guice:Binder#bindConstant() 和 Binder#bind() 之间的区别 ... toInstance

我想问一下有什么区别bindConstant().annotatedWith(Names.named("keepAliveInterval")).to(60);和bind(Integer.TYPE).annotatedWith(Names.named("keepAliveInterval")).toInstance(60);我想用Names.bindProperties(binder(),prop);加载我所有的配置属性在我的模块中,我发现它使用后一个来绑定(bind)属性。谢谢,问候马立克 最佳答案 我认为使用bindConsta

java - Guice 的@ImplementedBy 是邪恶的吗?在某些情况下是否合适?

我听说过“@ImplementedBy是邪恶的”的说法,理由是它破坏了DI概念并使接口(interface)意识到其实现者。在某些情况下这可能是正确的,但我经常发现它只会导致更干净的代码(不需要维护很长的模块),而不会真正伤害过程中的任何东西。作为实用主义者,而不是纯粹主义者,您认为什么时候值得使用@ImplementedBy? 最佳答案 我对@ImplementedBy有同样的呃、恶心、恶心的感觉,但同时,它非常有用。Spring必须扫描您给它的包列表中的所有类。在Guice中,您不必配置要扫描的包列表,@ImplementedB

java - 具有昂贵成员实例的 Guice Provider 是否应该使用 @Singleton 进行注释?

GuiceProviders应该用@Singleton注释吗?我的理由:如果Provider正在向其他Singleton类提供一个对象,并且对象本身的创建成本相对较高,那么使用在其@Inject-标记的构造函数,将其存储为成员并仅在getter中返回已保存的全局变量?像这样:@SingletonpublicclassMyProviderextendsProvider{privateExpensiveObjectobj;@InjectpublicMyProvider(){/*Createtheexpensiveobjecthere,setittothis.obj*/}@Overridep

java - 是否可以在 Guice 的范围末尾自动清理资源?

假设我有一个使用请求范围通过Guice注入(inject)的Closeable对象:@Provides@RequestScopedpublicMyCloseableResourceprovidesMyCloseableResource(){returnnewMyCloseableResourceImpl();}是否可以挂接一个清理方法,当范围存在时自动调用我的资源上的close(),而无需诉诸自定义范围实现?看自定义scopeimplementationguide在Guicewiki上,它表明应该像这样创建和清理范围:/***Runs{@coderunnable}inbatchscop