Tag: guice

在Guice注入一家通用工厂

以下代码是在给定Foo生成Bar的工厂示例。 工厂不关心T是什么:对于任何类型T ,它可以从Foo创建Bar Foo 。 import com.google.inject.*; import com.google.inject.assistedinject.*; class Foo { public void flip(T x) { System.out.println(“flip: ” + x); } } interface Bar { void flipflop(T x); } class BarImpl implements Bar { Foo foo; @Inject BarImpl(Foo foo) { this.foo = foo; } public void flipflop(T x) { foo.flip(x); System.out.println(“flop: ” + x); […]

Guice单身人士是否尊重线程限制?

我对Guice以及它的单身人士是否会服从我可能尝试设置的线程限制表示关注: public class CacheModule extends AbstractModule { @Override protected void configure() { // WidgetCache.class is located inside a 3rd party JAR that I // don’t have the ability to modify. WidgetCache widgetCache = new WidgetCache(…lots of params); // Guice will reuse the same WidgetCache instance over and over across // multiple calls to Injector#getInstance(WidgetCache.class); bind(WidgetCache.class).toInstance(widgetCache); […]

如何在运行时实例化Spring托管bean?

我坚持从简单的java到spring的简单重构。 Application有一个“Container”对象,它在运行时实例化它的部分。 让我解释一下代码: public class Container { private List runtimeBeans = new ArrayList(); public void load() { // repeated several times depending on external data/environment RuntimeBean beanRuntime = createRuntimeBean(); runtimeBeans.add(beanRuntime); } public RuntimeBean createRuntimeBean() { // should create bean which internally can have some // spring annotations or in other words // should be managed […]

Guice:可以注入模块吗?

我有一个需要一些Depedency的模块。 有没有办法可以注入模块本身? 我意识到这有点鸡蛋和鸡蛋的情况…… 例: public class MyModule implements Module { private final Dependency d_; @Inject public MyModule(Dependency d) { d_ = d; } public void configure(Binder b) { } @Provides Something provideSomething() { // this requires d_ } } 我想在这种情况下,解决方案是将@Provides方法转换为完整的Provider类。 这显然是一个简化的例子; 我正在处理的代码有很多这样的@Provides方法,所以将它们分别切割成单独的Provider类并引入一个模块来配置它们会增加相当多的混乱 – 我认为Guice就是减少样板杂乱? 也许这反映了我对Guice的相对苛刻,但我遇到了一些我很想做上述事情的案例。 我肯定错过了什么…

在java中使用TypeLiteral

请提供一些关于如何TypeLiteral Google Guice或Java EE中的TypeLiteral基本信息。如果使用简单的代码解释它将非常有用,提前感谢

我如何测试Guice注射?

我向Google Guice提供了连接我的物品的责任。 但是,我如何测试绑定是否运行良好? 例如,假设我们有一个具有依赖关系B A类。 如何测试B是否正确注入? class A { private B b; public A() {} @Inject public void setB(B b) { this.b = b } } 请注意, A没有getB()方法,我想断言Ab不是null 。

确保模块仅在Guice中加载一次

必须处理Guice,我想知道我应该如何处理模块方面的依赖关系。 在Guice中,每个模块都由一个实例提供。 因此,如果我有一个需要某个服务的模块,它会创建一个模块,为该服务添加一个绑定并安装它(binder.install(module))。 现在我有两个独立的模块,完全可以独立使用,并且都安装相同的数据库模块。 独立使用这两个模块没有问题,但如果两个模块在同一个应用程序中使用会发生什么? 数据库模块将由两个模块独立加载,但不能正确。 有没有办法询问活页夹是否某种类型已经绑定? 我无法使用getProvider来检查它,因为返回的所有内容都是LookupProvider,无论某些内容是否已经绑定。 那么如何处理这种情况呢? 更新: 它接缝Guice无法提供以下function: 检查给定模块是否已加载。 检查给定的类是否已绑定。 使用配置中的提供程序可以执行分布式配置(模块能够配置要提供的对象)。

自定义Guice绑定注释与参数

我已经成功创建了一个Guice绑定注释,将单线程java.util.concurrent.ExecutorService实例注入到构造函数中。 这是一个示例用法: public class ContainsSingleThreadedExecutorService { private final ExecutorService executorService; @Inject public ContainsSingleThreadedExecutorService(@SingleThreaded ExecutorService executorService) { this.executorService = executorService; } } 我现在想为multithreading执行程序创建一个类似的注释,在注释中指定ThreadPool大小。 例如: public class ContainsMultiThreadedExecutorService { private final ExecutorService executorService; @Inject public ContainsMultiThreadedExecutorService(@MultiThreaded(poolSize = 5) ExecutorService executorService) { this.executorService = executorService; } } 有没有人知道如何从Guice提供程序访问“poolSize”参数的值?

Java Generics:在运行时访问Generic Type

我想在运行时访问声明字段的generics类型。 我之前的印象是,由于Java类型擦除,这是不可能的。 但是,情况并非如此,因为一些众所周知的框架在运行时通过reflection来利用generics类型。 例如,Guice将根据您提供的generics类型实现Provider: public class Injectable{ @Inject private Provider someTypeProvider; } 如何通过reflectionAPI访问字段的“SomeType”generics属性或任何此类类型/方法/等? 此外,了解如何通过Java 6 Annotation Processor API访问这些generics类型属性也很有帮助。 谢谢。 编辑: 谢谢大家的指示。 我找到了一种方法,使用haylem的链接,特别是Prenkov的文章Java Reflection:Generics 。 这是我正在寻找的答案: /** * @author John Ericksen */ public class TypeReflectionExample { public class SomeType{} public class Injectable{ @Inject private Provider someTypeProvider; } public static void main(String[] args){ try { Field providerField […]

具有类型参数的Guice模块

我花了一些时间想知道是否可以编写一个guice模块,它本身是用类型T参数化的,并使用它的类型参数来指定绑定。 就像在这个(不工作)的例子中一样: interface A {} class AImpl implements A{} interface B {} class BImpl implements B {} class MyModule extends AbstractModule { @Override protected void configure() { bind(new TypeLiteral<A>(){}).to(new TypeLiteral<AImpl>(){}); bind(new TypeLiteral<B>(){}).to(new TypeLiteral<BImpl>(){}); } } 我尝试了不同的方法,尝试将T传递给MyModule作为Class / TypeLiteral的实例但没有一个工作。 帮助赞赏。 此致,ŁukaszOsipiuk