【发布时间】:2014-01-02 15:58:38
【问题描述】:
我继承了一个小网络应用程序,其中包含类似于以下内容的根资源:
import javax.ws.rs.Path;
@Path("somepath")
public class ResourceClass
{
DataSource source = new SpecificDataSource();
@GET
public String getInfo() {
return source.queryThatReturnsNumber().toString();
}
}
并且有几个不同的类与此类似。有没有一种方法可以将源成员变量设置为 SpecificDataSource 以外的值?我对此相当陌生,但在传统的 POJO 中,我将有一个构造函数,它接受一个实现 DataSource 接口的类并将源设置为该对象。对于泽西岛,我不相信我可以直接控制这些对象的构造。
简单来说,有没有办法为 Jersey Root Resource 类提供初始化机制?
【问题讨论】:
-
查看 jersey-spring 集成并使用依赖注入。
-
您确定在创建 ResoureClass 对象期间从未调用构造函数吗?我几乎可以肯定,无论您拥有什么样的资源,在较低级别,JVM 中的对象创建都不会改变(假设您使用的是默认构造函数而不是某些特殊构造函数)。最简单的测试方法是创建一个默认构造函数 public ResourceClass() {System.out.println("HI FROM CONSTRUCTOR");},使用其他客户端(或浏览器)调用 /somepath 并在日志中查看是否看到此日志陈述。我假设它会在每次通话时记录 SOP。
-
这应该可以告诉你构造函数是否被调用。如果不是(我将不得不尝试),那么您将不得不以其他方式注入对象,但根据我的猜测,我确信它应该在对象创建时调用默认构造函数。这样,您可以在默认构造函数中实例化您想要的任何实例字段。
-
哦,它们的构造函数正在被调用,但我无法控制它是如何被调用的(我可能在这里错了。)就像我想传递构造函数参数一样:
ResourceClass(new BlueDataSource()) vs ResourceClass(new RedDataSource())
标签: java rest jersey jersey-1.0