Tag: guice

Guice在注入的构造函数参数上忽略@Nullable

我正在使用Guice(v 3.0)并且有一个值被注入到构造函数中。 这个值可以为null,所以我在构造函数中使用@Nullable(来自javax.annotations)注释了该参数。 public MyClass(Parameter1 p1, @Nullable Parameter2 p2) { } 但是,Guice在初始化课程时抱怨提供错误: parameter 2 of com.abc.MyClass.() is not @Nullable 我不明白为什么这不起作用,还有什么我需要做的吗?

Guice:根据谁获得它来注入不同的实现?

我有两个第三方类,它们都采用Authorizer接口的实现。 我需要为每个实现注入不同的实现。 如果我执行@Provides ,我如何实现它以便它在运行时提供所需的实现? 提供者不知道谁在要求注射。 从理论上讲,我可以使用@Named ,但我不能修改被注入的代码。 我想做的事情如下: bind(Authorizer.class).to(ImplA.class).for(SomeClass.class) bind(Authorizer.class).to(ImplB.class).for(SomeOtherClass.class) 显然,“for”代码不存在,但是有一些等效的方法吗?

当我尝试启动jetty时,为什么lambda表达式会破坏guiceerror handling?

我遇到以下问题,我尝试启动jetty,我得到以下的例外: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: There was an error in the forked process [ERROR] org.apache.maven.surefire.testset.TestSetFailedException: java.lang.RuntimeException: com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsException: 51966 [ERROR] at org.apache.maven.surefire.common.junit4.JUnit4RunListener.rethrowAnyTestMechanismFailures(JUnit4RunListener.java:206) [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:114) [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeEager(JUnitCoreWrapper.java:85) [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:54) [ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:134) [ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) [ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) [ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) [ERROR] Caused by: java.lang.RuntimeException: com.google.inject.internal.util.$ComputationException: java.lang.ArrayIndexOutOfBoundsException: 51966 [ERROR] at org.apache.maven.surefire.junitcore.TestSet.replay(TestSet.java:100) […]

Google Guice桌面应用程序 – 如何使其工作?

我在我的网络应用程序中使用Guice没有问题,我想在桌面应用程序中使用它。 我当然缺少一件事 – 某种方式告诉我的应用程序如何绑定所有内容并知道什么是什么。 在Web应用程序中,我在Application类中声明了这一点,我应该如何在桌面应用程序中执行此操作? 这是我正在使用的相关代码: public class GuiceModule extends AbstractModule { @Override protected void configure() { // Enable per-request-thread PersistenceManager injection. install(new PersistenceManagerFilter.GuiceModule()); // Business object bindings go here. bind(ProjectQueries.class).to(JdoProjectQueries.class); bind(new TypeLiteral<Repository>() { }).to(JdoProjectRepository.class); } 我的主要课程: @Inject public Repository projectRepo; public void createNewProject() { … projectRepo.persist(newProject); } 我当然正在使用projectRepo.persist(newProject); 那么,我还需要做些什么才能让它发挥作用? 编辑: 好的,那个部分现在正常工作,谢谢:)似乎我需要做更多的事情来让持久性工作那样。 我现在在这里接受NPE: public void […]

Weblogic 12c:Jersey的首选web-inf-classes和prefer-application-packages

我必须在Weblogic 12c服务器(12.2.1)上同时使用两个(奇怪的是)“ prefer-web-inf-classes ”和“ prefer-application-packages属性weblogic.xml” 它是基于Jersey 1.9的REST应用程序。 *(Jersey 1.x JAX-RS RI)和Guice。 1.为什么要使用:prefer-web-inf-classes 如果你有多个WAR,你必须在war / lib的级别放置guice-jersey / guice的库, 否则你会得到Multibindings Error 。 必须指出prefer-web-inf-classes为true 。 这种方式正常! 我试图以相同的方式使用prefer-application-packages和package( com.sun.jersey.guice.spi.container.servlet /com.google.inject.servlet等等 ),但没办法。 注意:无法在EAR级别排除此库。 2.为什么要使用:prefer-application-packages 要在Weblogic 12c(12.2.1)上使用Jersey 1.x JAX-RS RI,所以我必须指出以下包( Weblogic使用Jersey 2的其他方式,以及不同版本的Jackson库等 ) 如果以这种方式表示,它在Jersey 1.X上完美运行。 。 我已分别探讨了两场战争,并且工作得很好……但是,请记住我的朋友我有两场战争……所以…. 概要 我不能同时使用这两个属性(在weblogic.xml上使用这两个属性部署错误..),但它需要: 对于Guice Filter的问题,需要将prefer-web-inf-classes设置为true,以便在war-lib级别使用guice-servlet.jar / jersey-guice.jar。 要使用Jersey 1.x,需要使用….. prefer-application-package 问题 :如何将两者结合使用其中之一?

Guice基于注释值注入

我想使用goolge / guice根据我提供的类注释注入一个值。 AutoConfig注释 @BindingAnnotation @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.PARAMETER, ElementType.FIELD }) public @interface AutoConfig { // default null not possible Class<? extends Provider<? extends ConfigLoader>> provider() default XMLAutoConfigProvider.class; } 这是我的注释,它允许配置应该用于带注释字段的配置类型。 用例: @AutoConfig() ConfigLoader defaultConfig; @AutoConfig(provider = JsonConfigProvider) ConfigLoader jsonConfig; 我想要两个配置,一个默认/ xml一个和一个json。 它们可能永远不会同时出现在同一个类中。 但我不知道何时使用这一个或另一个。 我在类中使用了这个方法,因为它们是由一些依赖项/库提供的,这个注释将用于一些(可插入的)子模块。 MyGuiceModule public class MyGuiceModule extends AbstractModule { @Override protected void configure() { […]

Guice动态注入自定义注释

我有一些资源,但我不能迭代它并将它们全部绑定,我必须使用密钥来请求资源。所以,我必须动态注入。 我定义了一个注释 @Target({ METHOD, CONSTRUCTOR, FIELD }) @Retention(RUNTIME) @Documented @BindingAnnotation public @interface Res { String value();// the key of the resource } 像这样用 public class Test { @Inject @Res(“author.name”) String name; @Inject @Res(“author.age”) int age; @Inject @Res(“author.blog”) Uri blog; } 我必须处理由@Res注释的@Res ,我需要知道注入字段和注释。 这在Guice有可能吗? 即使有spi?

Google Appeice上的Google Guice:使用_ah进行映射

我有一个Google Appengine / Guice / Wicket应用程序。 我的问题是,由于映射,我无法再访问/ _ah / admin页面了。 我的Servlet模块说: serve( “/*” ).with( WicketServlet.class, getWicketServletParams() ); 到目前为止,或多或少地预期访问/ _ah / admin会给出404。 我的问题是我没有找到解决方法。 我尝试了不同的serveRegex()组合,但是甚至 serveRegex( “/.*” ).with( WicketServlet.class, getWicketServletParams() ); 导致问题,因为Wicket的URL调度被破坏。 应用程序继续重复路径(例如/ list变为/ list / list等)。 有任何想法吗?

使用guice注入与actor抛出空指针

我在服务器的字段注入上获得空指针exception,该服务器作为akka actor启动。 计划部分: private ActorRef myActor = Akka.system().actorOf( new Props(Retreiver.class)); @Override public void onStart(Application app) { log.info(“Starting schedular…..!”); Akka.system() .scheduler() .schedule(Duration.create(0, TimeUnit.MILLISECONDS), Duration.create(30, TimeUnit.MINUTES), myActor, “tick”, Akka.system().dispatcher()); } Retreiver类部分: public class Retreiver extends UntypedActor { private Logger.ALogger log = Logger.of(Retreiver .class); @Inject private myDataService dataService; @Override public void onReceive(Object arg0) throws Exception { if (0 […]

在运行时更改Guice绑定

我希望能够在运行时更改Guice注入,以支持基于用户输入的多次注入。 这就是我想要实现的目标: public interface IDao { public int someMethod(); } public class DaoEarth implements IDao { @Override public int someMethod(){ … } } public class DaoMars implements IDao { @Override public int someMethod(){ … } } public class MyClass { @Inject private IDao myDao; public int myMethod(String domain) { //If Domain == Earth, myDao should […]