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.我希望在这种情况下可以使用传统机制,但您可能会遇到一些障碍(?)
标签:requestfactory,dependency-injection,guice,java,gwt 来源: https://codeday.me/bug/20191102/1995099.html