java - Google Guice 桌面应用程序 - 如何让它工作?

标签 java guice inject

我在我的网络应用程序中使用 Guice 没有问题,我想在桌面应用程序中使用它。我当然遗漏了一件事 - 某种方式告诉我的应用程序如何绑定(bind)所有内容并知道什么是什么。在 Web 应用程序中,我在应用程序类中声明了它,我应该如何在我的桌面应用程序中进行声明?

这是我正在使用的相关代码:

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<Project>>() { }).to(JdoProjectRepository.class);
 }

我的主课:

@Inject
public Repository<Project> projectRepo;

public void createNewProject() {
   ...
   projectRepo.persist(newProject);
}

我当然要开始 projectRepo.persist(newProject);

那么,我还需要做些什么才能让它发挥作用?

编辑:

好的,那部分现在可以工作了,谢谢 :) 看来我需要做更多的工作才能使持久性以这种方式工作。

我现在在这里得到 NPE:

public void persist(T entity) 
{ 
pmProvider.get().makePersistent(entity); 
} 

get() 在这里返回 null

看起来像 安装(新的 PersistenceManagerFilter.GuiceModule()); 是不足够的。我需要做什么?我的存储库类开始于:

public abstract class JdoRepository<T> implements Repository<T> { 
  private final Class<T> clazz; 
  private final Provider<PersistenceManager> pmProvider; 
  protected JdoRepository(Class<T> clazz, Provider<PersistenceManager> pmProvider)    {       this.clazz = clazz; this.pmProvider = pmProvider; 
} 

在我的 PMF 我有:

public static class GuiceModule extends AbstractModule { 

  @Override protected void configure() { 
    bind(PersistenceManager.class).toProvider(new Provider<PersistenceManager>() {
      public PersistenceManager get() { 
         return PersistenceManagerFilter.pm.get(); 
         } 
      }); 
    } 
   }

最佳答案

使用 main 方法创建 Bootstrap 类。

将您当前的静态主要方法代码移动到非静态代码。例如 Application#run

Bootstrap 类中创建 main 方法:

public static void main(String[] args) {
    Injector injector = Guice.createInjector(new GuiceModule())
    Application app = injector.getInstance(Application.class);
    app.run();
}

运行 Bootstrap 类。

关于java - Google Guice 桌面应用程序 - 如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883112/

相关文章:

java - JAXB 绑定(bind)父类(super class)型属性

guice - 如何将注入(inject)参数和辅助参数传递给 Guice Provider?

java - Struts2 中的 Guice 3

c# - 带有 Unity Buildup<T> 问题的工厂模式

java - 如何将对象传递给 UnitTest 类中被测试的类?

java - 如何修复 "Error running ' 应用' : Default Activity not found"

java - Hibernate池似乎释放了连接

java - Activity 指示器和线程黑莓

spring - 依赖注入(inject) - 在运行时决定参数

ruby - 使用注入(inject)来计算数组中的元素