Tag: guice

Eclipse OSGi包重新获得另一个bundle的片段

这可能是一个简单的问题,但有时让我困惑。 我正在开发一个依赖谷歌guice的OSGi包。 Google guice有一个主要的捆绑和几个片段,如辅助注入片段。 在我的包中,我使用了辅助注入片段和从该片段导出的类。 但是在Eclipse中,我只能在另一个bundel(在本例中为guice包)上设置bundle依赖,而不是直接在片段上(辅助注入),因此Eclipse抱怨无法找到从片段中导出的类。 如何依赖bundle的片段?

Guice:无法在Request范围中注入带注释的类型

我试图将一个带注释的变量注入REQUEST范围: Map<Key, Object> seedMap = ImmutableMap.<Key, Object>builder(). put(Key.get(String.class, Names.named(“name”)), name).build(); return ServletScopes.scopeRequest(new InjectingCallable(injector, GetModule.class), seedMap).call(); 其中,InjectingCallable在REQUEST范围内注入GetModule: /** * A Callable that is constructed in one scope and injects a Callable into a potentially separate * scope. * * @param the type of object returned by the Callable * @author Gili Tzabari */ public final class […]

如何用Google Guice实现“机器人腿”用例?

我正在学习Google Guice。 你知道如何实现“机器人腿”问题吗? 让我用一个例子解释一下。 假设我有一个名为Service类: @Singleton public class Service { @Inject Source source; } 接口Source有两个实现: public class SourceDatabase implements Source { } public class SourceFileSystem implements Source { } 我的模块实现如下: public class MyModule extends AbstractModule { @Override protected void configure() { bind(Service.class).asEagerSingleton(); } } 好吧,我想知道这是否可行: public class MainClass { @Inject @SomeAnnotation(“database”) Service serviceWithADatabaseSource; @Inject @SomeAnnotation(“file-system”) […]

Guice @Provides方法与提供者类

我正在研究一个有大量注射的大型项目。 我们目前正在使用一个为每个需要一个注入实现Provider的类,它们大多数都有一个get方法。 每当我需要一个新的提供者时,创建一个新类就开始变得烦人。 使用提供程序类而@Provides我的Module @Provides方法有什么好处,反之亦然?

Guice – 如何实现返回不同实现的工厂

假设我有一个名为Guice服务的服务,这里是它的构造函数 public GuiceService(IPayment payment) { this.payment = payment; } 我的代码用于使用Enum创建它 IPayment payment = new PaymentFactory.create(PaymentType.Cash); NaiveService naiveService = new NaiveService(payment); 而且我必须在某个地方进行工厂实施。 像这样的东西 public IPayment create(PaymentType paymentType) { IPayment cardPayment = null; switch (paymentType) { case Cash: cardPayment = new CashPayment(100); break; case Card: cardPayment = new CardPayment(10, 100); break; } return cardPayment; 现在我想使用Guice,我想我想使用FactoryModuleBuilder。 如果我有更多的IPayment实现,那么这样做的方法是什么。 (例如,CardPayment,CashPayment) […]

使用AspectJ实现虫洞模式

我正在寻找使用AspectJ的虫洞模式实现的一个例子(如果Guice AOP有能力实现这一点,将会感兴趣)。 蠕虫洞本质上允许您沿着调用流传递其他参数,例如: // say we have class foo { public int m0 int a, int b) { return m1(a,b); } public int m1 int a, int b) { return m2(a,b); } public int m2 int a, int b) { return a+b; } } // and I wanted in a non-invasive manner to pass a […]

如何使用Guice获取接口的所有实现者/子类?

使用Spring,您可以定义一个数组属性,并让Spring注入从给定类型派生的每个(@Component)类中的一个。 在Guice中有相同的效果吗? 或者是一个添加此行为的扩展点?

使用Multibinding来概括guice的机器人腿示例

我有这个用例非常类似于Guice的机器人腿例子,除了我不知道我有多少“腿”。 因此,我无法使用机器人腿示例所需的注释。 我期望在带有Guice的Multibindings扩展的java.util.Set中收集所有这些“leg”。 从技术上讲,在PrivateModule中,我想直接将实现作为Multibindings扩展提供的集合的元素公开。 我只是不知道该怎么做。 有关参考和代码示例,请参阅此处的robot-legs示例: http : //code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions#How_do_I_build_two_similar_but_slightly_different_trees_of_objec 这是我的确切用例: 我有以下内容: // Main application public interface MyTree {…} public interface MyInterface { public MyTree getMyTree() {} } public abstract class MyModule extends PrivateModule {} public class MyManager { @Inject MyManager (Set interfaces){ this.interfaces = interfaces } } public class MainModule extends AbstractModule { public void […]

Guice + Tomcat潜在的内存泄漏

我刚刚开始在我的Tomcat webapp中使用Google Guice,并且每当WAR文件取消部署时,都会在catalina.out文件中注意到以下内容: May 16, 2011 5:37:24 PM org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/app] May 16, 2011 5:37:24 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: A web application appears to have started a thread named [com.google.inject.internal.util.$Finalizer] but has failed to stop it. This is very likely to create a memory leak. May 16, 2011 5:37:24 PM org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap […]

使用自定义参数注入变量而不创建2个guice helper接口?

我正在使用guice在我的构造函数中动态注入类。 例如: @Inject public PublisherFrame(EventBus eventBus, MyPublisherService publishService) 在我的guice模块中: bind(EventBus.class).in(Singleton.class); bind(MyPublisherService.class).in(Singleton.class); 工作没有问题。 当我创建一个具有在java代码中构造的参数的对象时,问题就开始了: public LoginController(EventBus eventBus, MyPublisherService publisherService, LoginDialog dlg) 这里的LoginDialog是java代码创建的java类。 为了解决这个问题,我使用了@assist和: install(new FactoryModuleBuilder().implement(ILoginController.class, LoginController.class).build(GuiceLoginControllerFactory.class)); 工作也很好。 但现在我必须创建2个额外的java文件: 一个新的LoginController接口:ILoginController,除了帮助guice之外什么也不做。 guice的另一个接口:GuiceLoginControllerFactory 有没有更简单的方法来注入一个在构造函数中有自定义参数的变量? (没有创建2个额外的“guice”帮助文件)