标签: guice

我可以使用 Guice 在方法中获取实例吗?

我刚刚开始使用 Guice,所以我的理解可能是完全错误的。

我有一个接口Foo和一个实现FooImp

我在模块中使用了以下代码来注入它:

bind(Foo.class).annotatedWith("Foo").toInstance(foo);  // foo is an instance of FooImp
Run Code Online (Sandbox Code Playgroud)

然后我猜现在在我的代码中,Foo名称注释为“Foo”的实例将被替换为foo

@Named("Foo")
Foo fooInst;   // fooInst will be foo at runtime?
Run Code Online (Sandbox Code Playgroud)

如果我是对的,我怎样才能实现这一目标:

public Foo doSomething() {  // for some reason there must be no arguments
    @Named("Foo")
    Foo fooInst;   // injecting here seems not allowed...?
    fooInst.do();
}
Run Code Online (Sandbox Code Playgroud)

java dependency-injection guice

1
推荐指数
1
解决办法
1509
查看次数

如何使用 Guice 将必要的对象注入 AspectJ 方面

有没有办法在我有一个方面必须在其逻辑中使用一些复杂的实例化服务的情况下使用 Guice 和 AspectJ ?

例如:

@Aspect
public class SomeAspect {

  private final ComplexServiceMangedByGuice complexServiceMangedByGuice;

  @Inject
  public SomeAspect(ComplexServiceMangedByGuice complexServiceMangedByGuice){
    this.complexServiceMangedByGuice = complexServiceMangedByGuice;
  }

  @AfterThrowing(value = "execution(* *(..))", throwing = "e")
  public void afterThrowingException(JoinPoint joinPoint, Throwable e){
    complexServiceMangedByGuice.doSomething(e);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试像示例中那样(使用方面构造函数),我的方面将不会被调用。如果我尝试注入字段(没有定义方面构造函数),方面将被调用,但字段complexServiceMangedByGuice不会被设置。我发现的一个解决方案是在建议方法主体中获取实例,因此一个方面将如下所示:

@Aspect
public class SomeAspect {

private static ComplexServiceManagedByGuice complexServiceManagedByGuice;

  @AfterThrowing(value = "execution(* *(..))", throwing = "e")
  public void afterThrowingException(JoinPoint joinPoint, Throwable e){
    if(complexServiceManagedByGuice == null){
    Injector injector = Guice.createInjector(new ModuleWithComplexService());
    complexServiceMangedByGuice = injector.getInstance(ComlexServiceManagedByGuice.class);
    }
    complexServiceMangedByGuice.doSomething(e);
  }
}
Run Code Online (Sandbox Code Playgroud)

但这会带来一些不良的开销。

java aop dependency-injection aspectj guice

1
推荐指数
1
解决办法
3684
查看次数

Google guice 的依赖注入在 Scala 中不起作用

我想使用 DI google guice,它在 Java 中工作得很好,但在 scala 中不起作用。这是我的代码:

模块:

class ConfigModule extends AbstractModule{
  override def configure(): Unit = {

  }

  @Provides
  @Named("config")
  def getConfig(): Config = {
    new Config
  }
}
Run Code Online (Sandbox Code Playgroud)

配置

   class Config {
    val config1: String = "Sample"
   }
Run Code Online (Sandbox Code Playgroud)

服务

class Service(@Named("config") config:Config) {
    
      def read(): Unit = {
        println("Reading")
      }
    
    }
Run Code Online (Sandbox Code Playgroud)

主班

object SampleJob {
  def main(args: Array[String]): Unit = {
    val injector = Guice.createInjector(new ConfigModule)
    val service = injector.getInstance(classOf[Service])
    service.read()
  }

}
Run Code Online (Sandbox Code Playgroud)

错误:

1) Could not …
Run Code Online (Sandbox Code Playgroud)

dependency-injection scala guice

1
推荐指数
1
解决办法
636
查看次数

为什么我的@singleton不起作用?

我在尝试@Singleton of Guice时遇到了一个问题:

import com.google.inject.Singleton;

@Singleton
public class ConfigManager {
    private String data;

    public void setData(String data) {
        this.data = data;
    }

    public String getData(){
        return this.data;
    }

    public static void main(String[] args){
        ConfigManager config1 = Guice.createInjector().getInstance(ConfigManager.class);
        ConfigManager config2 = Guice.createInjector().getInstance(ConfigManager.class);
        config1.setData("data");
        System.out.println(config2.getData());
    }

} 
Run Code Online (Sandbox Code Playgroud)

为什么这个简单的样本总是打印空?

java singleton guice

0
推荐指数
1
解决办法
667
查看次数

使用Hibernate和Guice管理JavaSE中的事务

我正在编写一个使用GWT,Hibernate和Google Guice(使用GIN)的相当简单的应用程序.我想要做的是使用外部管理器管理事务(比如 @Transactional在Spring中使用),而不是使用EntityManager#getTransaction.我试过用@Transactional,但它似乎对我不起作用.

我已经使用了EntityManager注入Providers,如下所示:

/* import stuff */

public class DbProvider implements Provider<EntityManager> {

    public EntityManager get() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("persdb");
        return emf.createEntityManager();
    }

}
Run Code Online (Sandbox Code Playgroud)

在手动管理事务时,它似乎正常工作.我希望自动管理事务,也可以使用DBUnit进行自动化测试.

有谁知道如何解决这个问题?

java hibernate transactions guice

0
推荐指数
1
解决办法
1912
查看次数

运行JUnit测试的错误(JPA,Derby,Hibernate,Guice)

我正在尝试为我的DAO对象创建一个JUnit测试.JUnit直接从Netbeans运行.我对其中的几种技术都很陌生,因此我有一段时间可以追踪我的错误来自何处.我的代码和我看到的相应错误是:

2011年7月22日下午7:09:09 com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient INFO:找不到javadb客户端jar文件,默认情况下derby jdbc驱动程序不可用.FATAL [DatasourceConnectionProvider] - 无法找到数据源:Waylon org.omg.CORBA.COMM_FAILURE:FINE:IOP00410001:连接失败:socketType:IIOP_CLEAR_TEXT; hostname:localhost; port:3700 vmcid:OMG次代码:1完成:没有javax.naming.NamingException:在SerialContext中查找'Waylon'失败[myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory ,java.naming.factory.url.pkgs = com.sun.enterprise.naming,java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [root异常是javax.naming .NamingException:无法为SerialContext获取SerialContextProvider [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.url.pkgs = com.sun.enterprise.naming ,java.naming.factory.state = com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [根异常是org.omg.CORBA.COMM_FAILURE:FINE:IOP00410001:连接失败:socketType:IIOP_CLEAR_TEXT; hostname:localhost; 端口:3700 vmcid:OMG次要代码:1完成:否]]在sun.sref.enterEv. .reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)在com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)在java.lang.reflect.Constructor.newInstance(Constructor.java:513 )在com.sun.corba的com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)的javax.naming.InitialContext.lookup(InitialContext.java:392)中. ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)位于com.sun.corba.ee.spi.orbutil的org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52). org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(Connec)中的logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)tionProviderFactory.java:124)在com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access $ 400(WrapperGenerator.java:107)在org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)在com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator $ 2.invoke(WrapperGenerator.java:511)位于com.sun.corba.ee的org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62)位于org.hibernate.cfg的$ Proxy40.connectFailure(未知来源)的org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)中的.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99).位于org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)的com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnectionImpl.java:257)中的Configuration.buildSessionFactory(Configuration.java:1292)at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.(SocketOrChannelConnec tionImpl.java:270)at com.unernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)at com.sun.corba.ee.impl.transport.SocketOrChannelContactInfoImpl.createConnection(SocketOrChannelContactInfoImpl.java:129)at com.sun位于com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl的org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)上的.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.beginRequest(CorbaClientRequestDispatcherImpl.java:223) .request(CorbaClientDelegateImpl.java:228)位于org.omg.CORBA的com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.is_a(CorbaClientDelegateImpl.java:393)的javax.persistence.Persistence.createEntityManagerFactory(未知来源) .portable.ObjectImpl._is_a(ObjectImpl.java:112)位于com.google.inject.persist的org.omg.CosNaming.NamingContextHelper.narrow(NamingContextHelper.java:69)的javax.persistence.Persistence.createEntityManagerFactory(未知来源) .jpa.JpaPersistService.在com.sun.enterprise.naming.impl.SerialContext $ ProviderCacheKey.getNameService(SerialContext.java:1241)的com.sun.label.LabelDAOIJTest.setUpClass(LabelDAOIJTest.java:36)的com.sun开始(JpaPersistService.java:94) .enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:411)在com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:347)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at com.sun.enterprise.naming.impl.SerialContext.lookup (SerialContext.java:455)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在javax.naming.InitialContext.lookup(InitialContext.java:392)在java.lang.reflect.Method.invoke(方法. java:597)org.juni上的org.hibernate.connection.DatasourceConnectionProvider.configure(DatasourceConnectionProvider.java:52)位于org.junit.internal.runners.model.ReflectiveCallable.run的org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)中的t.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)(ReflectiveCallable)的.java:15)在在org.junit.runners.model.FrameworkMethod org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:29)在org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:62).在org.hibernate的org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)的org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2009)中调用了爆炸性的(FrameworkMethod.java:41) .cfg.Configuration.buildSessionFactory(Configuration.java:1292)在org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)在org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859 )org.junit.runners.ParentRunner.run(父 Runner.java:303)org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)位于org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence)的junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39) .java:126)org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)at org.apache.tools.ant的javax.persistence.Persistence.createEntityManagerFactory(未知来源) .taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)位于org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906)的javax.persistence.Persistence.createEntityManagerFactory (未知来源)at com.google.inject.persist.jpa.JpaPersistService.start(JpaPersistService.java:94)at waylon.label.LabelDAOIJTest.setUpClass(LabelDAOIJTest.java:36)引起:javax.naming.NamingException:Unable获取SerialContext的SerialContextProvider [myEnv = {java.naming.factory.initial = …

java unit-testing jpa derby guice

0
推荐指数
1
解决办法
3900
查看次数

Guice构造函数注入String依赖项(或其他未绑定的原语)?

这是一些代码:

public class InjectedClass{
    private final Dependency dependency;
    private final String string;
    @Inject 
    public InjectedClass(Dependency dependency, String string){
        this.dependency=dependency;
        this.string=string;
    }
 }
Run Code Online (Sandbox Code Playgroud)

假设我已经将我的依赖项绑定在我的模块中,但是我没有对String进行任何绑定.Guice如何/如何选择成为String参数的默认值?在我(更复杂的)测试用例中,似乎将其设置为"",但是它的逻辑如何对我来说并不明显,我不知道这是否是确定性行为.

java constructor dependency-injection guice

0
推荐指数
1
解决办法
815
查看次数

Guice + Jersey集成注入空对象

按照Up和在MaE,Jersey和Guice的AppEngine上运行的优秀步骤- 第3部分,除了将对象注入Jersey POJO之外,我已经能够完成所有工作.

我从该配置中唯一的区别是我也集成了Objectify,但这是有效的.

TestClass注入到HelloWorldServlet工作中的实例(单例),但注入POJO 的TestClassSecondTest(RequestScoped)对象HeyResource总是如此null.

我怀疑HK2和Guice之间的互动应该归咎于此,但这是我与Guice , Jersey HK2的第一个项目,所以我都在海上.

我的配置是:

  • 平台:赢7
  • GAE SDK 1.9.26
  • Jave 1.7.0_79
  • 泽西岛:2.5.1
  • Guice:4.0
  • Objectify:5.1.7
  • HK2 Guice-bridge:2.2.0
  • Maven 3.3.3

java google-app-engine guice maven-3 jersey-2.0

0
推荐指数
1
解决办法
556
查看次数

bind(Foo.class).to(Bar.class)与bind(Foo.class).toInstance(new Bar())之间的区别

bind(Foo.class).to(Bar.class)与bind(Foo.class).toInstance(new Bar())之间的区别是什么?

另外,使用后一种调用构造函数new Bar()的方法可以正确地注入字段吗?

guice

0
推荐指数
1
解决办法
840
查看次数

Guice - 没有绑定任何实现(对于List <String>)

当我使用特定注释注释List时,我正在尝试绑定List的实例.

我尝试使用Instance Binding和Provider方法,但我一直收到错误.

这是我的@Provides方法和configure()

@Provides @Named("Regions")
public List<String> getRegions() {
    return AppConfig.findVector("Regions"); //this would return a Vector<String>
}

@Override
protected void configure() {
    bind(List.class).annotatedWith(Names.named("Regions")).to(Vector.class);
}
Run Code Online (Sandbox Code Playgroud)

以下是我尝试获取实例的方法 -

List<String> regions = injector.getInstance(Key.get(List.class, Names.named("Regions")));
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

com.google.inject.ConfigurationException: Guice configuration errors:

1) No implementation for java.util.List annotated with @com.google.inject.name.Named(value=Regions) was bound.
while locating java.util.List annotated with @com.google.inject.name.Named(value=Regions)
Run Code Online (Sandbox Code Playgroud)

java guice

0
推荐指数
1
解决办法
2190
查看次数