playdocumentationaboutfunctionaltestsinjava显示两种模式使用fakeApplication指定自定义配置(在示例中为内存数据库)使用依赖注入(inject)配置应用我想使用依赖注入(inject),但我必须在应用程序启动时设置自定义配置,例如使用内存数据库。我无法做到这一点。我想这必须在guicebuilder中完成,但我不知道如何做。 最佳答案 我假设您正在使用Guice进行DI。关于issue的讨论4809在框架的github存储库上应该有助于回答您的问题。我能够使用该问题的解决方案之一
我正在使用guice-servlet(2.0)在每个HTTP请求开始时注入(inject)一个数据库连接,但是我怎样才能知道请求何时结束以便关闭连接?web.xmlGuiceFiltercom.google.inject.servlet.GuiceFilterGuiceFilter/*GuiceServletContextListener/***CreatesanewDatabaseconnection.*/@RequestScoped@ProvidesprivateConnectiongetConnection(); 最佳答案 这
我有一个简单的POJO:publicclassMyPOJO{@InjectprivateFizzfizz;privateBuzzbuzz;//restofclassomittedforbrevity}我想配置我的Guice模块,使其注入(inject)两种类型的Fizz:一个特殊的全局单例Fizz实例;和其他(非特殊)Fizz实例我希望MyPOJO被注入(inject)特殊/单例实例。所以我修改了我的代码:publicclassMyPOJO{@Inject@Named("Special-Fizz")privateFizzfizz;privateBuzzbuzz;//restofclas
我一直在网上寻找有关注入(inject)器层次结构以及如何/何时使用createChildInjector()的解释,但我找不到清晰简洁的解释。这是我的用例:我有一个基本应用程序模块,我用它来注入(inject)某些上下文项。该模块应包含在每个注入(inject)器实例中。我有一个搜索数据库的搜索模块我有一个搜索ElasticSearch的搜索模块。此类中的某些绑定(bind)应该覆盖数据库搜索模块中提供的绑定(bind)。例如,假设数据库搜索模块包含:bind(PlaceSearch.class).to(HibernatePlaceSearch.class);bind(PersonS
你如何初始化它:classA{finalBb;A(Bb){this.b=b;}}classB{finalAa;B(Aa){this.a=a;}}DI框架、反射、更好的设计?动机和用例(已添加):我的特定用例是简化A和B子类中的字段访问。因此,我将它们注入(inject)到派生类中的字段中以快速引用它们,而无需在每个子类中显式声明。还有关于DI的建议,对象最好是不可变的:Guicebestpracticesandanti-patterns. 最佳答案 你可以使用工厂方法classA{finalBb;A(Bb){this.b=b;}}a
我正在使用RESTEasy和Guice开发RESTAPI,目前我正在尝试通过使用类似于Dropwizard中的@Auth的注释来合并基本身份验证。与@Path("hello")publicclassHelloResource{@GET@Produces("application/json")publicStringhello(@AuthfinalPrincipalprincipal){returnprincipal.getUsername();}}hello资源调用应该被一些代码拦截,这些代码使用授权HTTP请求header中传递的凭据执行基本身份验证,并成功将主体注入(inject)
我有一个与Guice的机器人腿示例非常相似的用例,只是我不知道我有多少条“腿”。因此我不能使用机器人腿示例所需的注释。我希望使用Guice的Multibindings扩展将所有这些“腿”收集到一个java.util.Set中。从技术上讲,在PrivateModule中,我想将一个实现直接公开为将由Multibindings扩展提供的集合的一个元素。我只是不知道该怎么做。有关引用和代码示例,请参见此处的机器人腿示例:http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions#How_do_I_build_two_
我有一个我喜欢使用Guice重新实现的工厂:enumMyObjects{OBJECT1,OBJECT2,...}classObject1implementsSomeInterface{...}classObject2implementsSomeInterface{...}...classFactory{publicstaticSomeInterfacecreateObject(MyObjectsobj){switch(obj){caseOBJECT1:returnnewObject1();caseOBJECT2:returnnewObject2();...}}有没有简单的实现方法?类似
通常我这样定义记录器:privatestaticfinalLoggerlogger=LoggerFactory.getLogger(MyClass.class);但是在使用@Inject时我们必须使用非静态和非final字段,比如:@InjectprivateLoggerlogger;即记录器将在此类的每个实例中创建,记录器也是可变的。可能存在某种使记录器静态的方法?还有我如何将记录器绑定(bind)到某个类(我在从工厂LoggerFactory.getLogger(MyClass.class);创建记录器对象时使用发送类对象,如何使用注入(inject)以相同的方式创建记录器?)?
我需要告诉guice我想要一个OneFoo和一个TwoFoo作为Foo列表注入(inject)Bar的绑定(bind)语句是什么?这里的设置是一个责任链。现在我有两个实现,但Bar不需要知道。@InjectBar(Listfoos){...}...classOneFooimplementsFoo{@InjectOneFoo(...){...}...classTwoFooimplementsFoo{@InjectTwoFoo(...){...}但我正在努力使用类型、TypeLiteral等来配置将两个Foo实现提供给Bar的绑定(bind)。 最佳答案