java-注入数据库实例以实现静态和实例可访问性

我有一个与GWT的RequestFactory和关联代理一起使用的POJO. POJO同时具有静态方法(list())和实例方法(persist()),需要访问我的数据库.我的数据库连接池设置为通过Guice作为单例注入.我不确定是如何精确执行注入,以便这两种类型的方法都可以访问它?

此外,POJO的实例是使用空的构造函数创建的,因此无法使用构造函数注入.

为了方便参考,下面是一个示例POJO:

public class Person {
    private Integer id;
    private String name;

    public Integer getId() { return this.id; }
    public void setId(Integer id) { this.id = id; }
    public String getName() { return this.name; }
    public void setName(String name) { this.name = name; }

    public void persist() {
        //TODO: save state to DB
    }
    public static List<Person> list() {
        //TODO: get all people from DB
        return null;
    }
}

解决方法:

不知何故,GWT的风格仍然不是很了解依赖注入的需求.在某种程度上,这在客户端是可以原谅的,但在服务器端却没有那么多(老实说,我真的很希望GWT和Guice团队共同努力改善这种情况.)

现在,幸运的是,Guice提供了一种“传统”机制来注入静态字段,请参见http://code.google.com/docreader/#p=google-guice&s=google-guice&t=Injections中的“静态注入”.因此,您可以将EntityManager / EntityManagerFactory(或用于执行持久性的任何工具)注入到静态字段中.

您不必直接执行此操作,但是可以使用提供程序.然后选择正确的范围(例如@RequestScoped),以使提供程序为您提供正确的实例.

注意:我还没有尝试过(尽管我打算这样做),因为我还没有在实际项目中使用RequestFactory.我希望在这种情况下可以使用传统机制,但您可能会遇到一些障碍(?)

上一篇:java-Guice链接绑定与@Provides方法


下一篇:java-如何使用Guice使Multibinder与FactoryModuleBuilder和泛型一起使用?