Tag: guice

DI,Guice和战略模式

假设我有以下基类,Queen和Knight作为它的衍生物。 WeaponBehaviour是一个界面。 根据具体的GameCharacter类型,我无法弄清楚如何使用Guice注入武器。 public abstract class GameCharacter { @Inject protected WeaponBehaviour weapon; public GameCharacter() { } public void fight() { weapon.useWeapon(); } public void setWeapon(WeaponBehaviour weapon) { this.weapon = weapon; } }

注射仿制药与roboguice

我正在尝试使用generics注入实例,并且我收到以下错误: HasOne cannot be used as a key; It is not fully specified. 我在其他地方读过,最安全的方法是在使用注入器获取实例时明确命名要在generics中使用的类,但我想要更清洁一点。 我正在尝试在Models之间创建Relationship对象。 这是我简化的Model类 public class Model { @Inject Injector injector; public HasOne hasOne(Class clazz) { HasOne hasOne = injector.getInstance(Key.get(new TypeLiteral<HasOne>() { })); hasOne.init(clazz); return hasOne; } } 我的HasOne关系 public class HasOne { Class clazz; public void init(Class clazz){ this.clazz = clazz; } […]

Hibernate Validator:拦截无效值

我想设置我的bean以使用Hibernate Validator(用于validation)和Google Guice(用于DI和方法拦截)。 理想情况下,我想要一个设置,其中任何“失败”validation的方法将导致调用方法拦截器: public class Widget { @NotNull public Fizz getFizz() { return fizz; } } public class FailedWidgetInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation invocation) throws Throwable { // This gets executed if Widget’s getFizz() returns null… } } 但看起来Hibernate Validator只允许您通过将对象T显式传递给ClassValidator的getInvalidValues()方法来确定通过/失败状态。 所以我需要一个地方来打个电话! 我能想到的唯一可行的解决方案是创建我自己的注释(我之前从未做过!),它可能如下所示: @NotNull public @interface AutoValidatingNotNull { // …?? } 然后在Guice Module […]

Guice AssistedInject不会注入工厂

我正在尝试使用Guice 3.0 AssistedInject ,它不会实例化工厂。 SSCCE代码: 家长class public class ParentClass() { @Inject private MyFactory myFactory; private final Foo foo; private final Bar bar; public ParentClass() { if(myFactory == null) System.err.println(“Error: I should have injected by now!”); foo = myFactory.create(new Map()); // etc. } } 工厂界面 public interface MyFactory { Foo create(Map mapA); Bar create(Map mapB, Map […]

Guice:为共享库创建注入器

Google Guice新手。 我想用它来处理我正在开发的三个组件的所有IoC和AOP方法拦截: WidgetClient – 一个Swing应用程序 WidgetServer – 客户端将连接到/与之通信的小型EAR WidgetShared – 一个“commons”JAR,包含客户端和服务器使用的公共类 使用Swing应用程序,我会在某个地方进行显式调用,如下所示: public static void main(String[] args) { initGuiceInjectors(); } private static initGuiceInjectors() { Guice.createInjector(mySwingAppModule); } mySwingAppModule将定义Swing应用程序依赖项的所有绑定。 我将在服务器EAR中做一些非常相似的事情。 当谈到WidgetShared库时,我很窒息,因为lib没有一个入口点:它只是客户端和服务器将在整个地方使用的一堆包,类,接口和枚举。 所以我的第一个问题是: 我在哪里为WidgetShared JAR调用Guice.createInjector() ? 这个问题强调了第二个(类似的)问题,这也是我选择在这里进行分组的原因。 我阅读了Guice的“最佳实践”,并且压倒性的共识似乎是(在适用的情况下),将Module实现保持在包级别。 因此,对于每个包,将有一个Module具体化定义该包中所有类型的绑定。 这是对单个整体Module的改进,它定义了整个应用程序的绑定。 所以,上面的代码片段( Guice.createInjector(mySwingAppModule) )实际上并不是我的代码最终会是什么样的(抱歉我撒了!)。 我的第二个问题是: 创建多个注射器的“最佳实践”是什么? 我看到createInjector(Module… modules)可以使用vararg Module参数。 所以,对我而言,似乎我想拥抱这个“ 每个模块1个模块 ”的最佳实践,在某些时候我必须拥有如下所示的代码: Guice.creatorInjector(package1Module, package2Module, package3Module, package4Module, package5Module, package6Module, […]

@Nullable被guice忽略

我有一个类似的构造函数 @Inject public FxManagerFactory(DataServicesClientAPI dsApi, OptimisationHorizon horizon, Logger logger, ModelScenario modelScenario, @Nullable LimDataProvider limDataProvider ){…} 我收到了这个错误 null returned by binding at com.eet.mpm.portopt.domainmodel.modelrunners.PomModule.bindFactories(PomModule.java:171) but parameter 4 of com.eet.mpm.portopt.domainmodel.marketdata.FxManagerFactory.() is not @Nullable while locating com.eet.mpm.pricecurves.LimDataProvider for parameter 4 at com.eet.mpm.portopt.domainmodel.marketdata.FxManagerFactory.(FxManagerFactory.java:30) while locating com.eet.mpm.portopt.domainmodel.marketdata.FxManagerFactory at com.eet.mpm.portopt.domainmodel.modelrunners.PomModule.bindFactories(PomModule.java:172) while locating com.eet.mpm.portopt.intf.domainmodel.marketdata.IFxManager 在这里显示的第二个绑定 private void bindFactories() { bind(LimDataProvider.class).toProvider(LimDataProviderFactory.class).asEagerSingleton(); bind(IFxManager.class).toProvider(FxManagerFactory.class).asEagerSingleton(); 它在本地运行(’在我的电脑上工作’),当我调试它时,但是当在不同的环境中执行时,会发生错误。 我知道一个类似的问题,但它似乎与eclipse有关,我不认为这与这个问题有关,因为我没有使用eclipse。

使用generics进行多重绑定

我正在尝试创建一个Multibinder<A> Multibinder<A> 。 我尝试过使用Multibinder.newSetBinder(binder(), A.class) 。 第二个参数是Class所以在我的guice模块中执行此操作会给出类型不匹配错误。 Multibinder<A> multibinder = Multibinder.newSetBinder(binder(), A.class) 是否可以绑定这些通用集合? 也许我可以使用另一种Multibinder ? 有没有人有任何想法?

Java Generics:在运行时是否保留了有关generics类型的任何元信息?

背景 我对Javagenerics的理解是它完全是一个编译时function(主要关注类型安全检查)。 任何generics类的类型信息在运行时丢失( 类型擦除 )。 不过,我看到许多框架似乎也在运行时利用了类型信息。 例如,谷歌guice 提供商 。 guice提供程序可以在运行时实例化并提供它的generics类型的新实例。 class Container { @Inject public Container(Provider contentProvider) { //This works at Runtime… but How ??? //When type’s are not even preserved at runtime, how does the Provider knows it has to instantiate an object of type ‘Content’ Content content = contentProvider.get(); } } 题 是否存在与在运行时保留的generics类型相关的任何信息。 […]

如何在应用程序启动时注入“登录用户”之类的“运行时”依赖项?

我只是没有得到这个: 我在我的java GWT应用程序中使用Gin来做DI。 登录屏幕已集成到完整的应用程序窗口中。 在用户登录后,我想将用户对象注入到我创建的GUI Presenters等其他类中,所以我认为我有某种运行时依赖性。 我怎么做? 我能想到的一个解决方案是: class Presenter { @Inject Presenter(LoggedInUserFactory userFactory) { User user = userFactory.getLoggedInUser(); } } class LoggedInUserFactoryImpl { public static User user; User getLoggedInUser() { return user; } } 因此,当用户成功登录并且我有对象时,我在LoggedInUserFactory设置静态属性,但这只有在用户登录后创建Presenter时才有效,但事实并非如此。 或者我应该使用全局静态注册表? 我只是不喜欢在我的类中使用静态依赖的想法。 非常感谢任何输入。

是否可以将Spring Security与Google Guice一起使用?

我想将Spring Framework更改为Google Guice,因为它更轻,几乎可以满足我的所有需求。 是否可以将Spring Security与Google Guice一起使用而不是Spring Framework?