假设我有一个名为Guice服务的服务,这是它的构造函数publicGuiceService(IPaymentpayment){this.payment=payment;}我的代码曾经使用枚举创建它IPaymentpayment=newPaymentFactory.create(PaymentType.Cash);NaiveServicenaiveService=newNaiveService(payment);而且我必须在某个地方有一个工厂实现。像这样的东西publicIPaymentcreate(PaymentTypepaymentType){IPaymentcardPayment=
我有一个获取并持有APItoken的模块(简化):@SingletonpublicclassKeyHolderModuleextendsAbstractModule{//Thisdoesn'tseemtobeinjectedprivate@InjectTokenConnectorconnector;privateDateTimekeyLastRefreshed;privateStringkey;privateCredentialscreds=config.getCreds();@Overrideprotectedvoidconfigure(){this.key=connector.ge
我有一个注解@MyAnnotation,我可以用它来注解任何类型(类)。然后我有一个名为AnnotatedClassRegister的类,我希望它注册所有用@MyAnnotation注释的类,以便我以后可以访问它们。如果可能的话,我想在创建AnnotatedClassRegister时自动注册这些类,最重要的是在实例化带注释的类之前。我有AspectJ和Guice可供使用。到目前为止我想出的唯一解决方案是使用Guice将AnnotatedClassRegister的单例实例注入(inject)一个方面,它搜索所有用@MyAnnotation注释的类,并且它添加在其构造函数中注册此类所需
我刚刚开始维护一个使用JavaGuice框架的JavaMVC项目。在几乎整个代码中,首先开发人员将一个空模型接口(interface)作为参数传递给扩展另一个接口(interface)。这是第一个界面:publicinterfaceFooModelextendsModelInterface{}还有另一个接口(interface):publicinterfaceModelInterface{publicvoidaddListener(FooListenerfooListener);voidsetFoo(booleanblop);booleanisFoo();}这对我来说没有任何意义。在J
一个标准的对象工厂可能是这样的:interfaceI{...}classAimplementsI{...}classBimplementsI{...}classIFactory{IgetI(inti){switch(i){case1:returnnewA();default:returnnewB();}}}是否可以设置绑定(bind)以便为我完成切换,即我所做的只是调用getInstance或注入(inject)?我在看辅助注入(inject),但这似乎是不同的主题:https://code.google.com/p/google-guice/wiki/AssistedInject
看起来GWT有自己内置的DI机制(GWT.create(Class))。除此之外,GIN还提供什么好处?您应该将它们结合使用,还是相互排斥?我喜欢Guice,所以我很想使用GIN,但如果GWT已经可以开箱即用地做同样的事情,我不想再介绍它。 最佳答案 Gin和GWT.create有一些不同-Gin更多的是通过@Inject注释提供依赖,无论是在字段、setter还是构造函数上,而GWT.create专门用于获取实现。Gin将使用您提供的任何构造函数,但您必须特别提供替换类型,而GWT.create将仅使用默认构造函数,并且您的“重新
我们基本上需要能够在启动时调整行为,方法是在我们的应用程序中提供由各种工厂生成的所需类(以避免"new"运算符的硬绑定(bind))。我知道这是由几个大型框架提供的,但我一直在寻找独立Java应用程序易于使用的东西,而不是庞大的。有什么建议吗?编辑:根据我的经验,框架在成熟的过程中往往会变大(也变得复杂)。作为主要重构(技术债务)的一部分,我需要将其改造为遗留应用程序,因此使用的库必须简单。我不介意在我们的应用程序中做一些编码,但它必须非常清楚正在发生的事情。AOP倾向于将东西移开,这可能会使应用程序更难维护。编辑:我们现在已经到了真正需要做出决定的地步。该应用程序可能会存在数十年,因
我在作为akkaactor启动的服务器的字段注入(inject)中遇到空指针异常。附表部分:privateActorRefmyActor=Akka.system().actorOf(newProps(Retreiver.class));@OverridepublicvoidonStart(Applicationapp){log.info("Startingschedular.....!");Akka.system().scheduler().schedule(Duration.create(0,TimeUnit.MILLISECONDS),Duration.create(30,Time
JSR-330在包方面指定了某些命名约定,例如:javax.inject.Injectjavax.inject.ScopeGuice是JSR-330的引用实现。但是,在使用它时,您会注意到它不符合规范。例如:com.google.inject.Injectcom.google.inject.Scope到目前为止,我所看到的任何引用实现都没有发生这种情况。是什么让GoogleGuice如此特别,以至于作为RI,他们可以忽略他们正在实现的规范? 最佳答案 Guice3支持JSR330注释。它还支持com.google注释以向后兼容早期版
几个月前我在使用GUIce,现在当我回到它时,我发现我必须重新阅读Guice文档和示例才能理解我对我的代码做了什么。但是,当我查看AspectJ时,它太直观了。它是Java语言的直观扩展。我觉得我已经可以坐下来立即编写AspectJ代码了。因此,我很想放弃对Guice的追求,转而使用AspectJ。特别是Spring正在生成AspectJ代码这一事实。Guice在AspectJ之上有哪些特性应该阻止我放弃Guice?为什么Google不放弃Guice而改用AspectJ?反之亦然,除了直观性之外,AspectJ的哪些特性会鼓励我放弃Guice?如果允许我在这里“编织”一个问题,是什么阻