在reSTLet中得到这个错误:
ForwardUIApplication ; Exception while instantiating the target server resource.
java.lang.InstantiationException: me.unroll.forwardui.server.ForwardUIServer$UnsubscribeForwardUIResource
我确切地知道为什么。这是因为我的构造函数如下所示:
public UnsubscribeForwardUIResource(MySQLConnectionPool connectionPool) {
ReSTLet像这样访问资源:
router.attach(Config.unsubscribeUriPattern(), UnsubscribeForwardUIResource.class);
问题是我实际上需要那个ctor参数。如何使它可访问? (请注意,我没有使用任何IOC框架,只是使用了许多ctor参数,但这实际上是一个IOC模式)。
最佳答案
您可以使用上下文将上下文属性传递给资源实例。
从ServerResource API doc:
因此,在附加时间:
router.getContext().getAttributes().put(CONNECTION_POOL_KEY, connectionPool);
router.attach(Config.unsubscribeUriPattern(), UnsubscribeForwardUIResource.class);
在您的UnsubscribeForwardUIResource类中,您必须将初始化代码从构造函数移至de doInit方法:
public UnsubscribeForwardUIResource() {
//default constructor can be empty
}
protected void doInit() throws ResourceException {
MySQLConnectionPool connectionPool = (MySQLConnectionPool) getContext().getAttributes().get(CONNECTION_POOL_KEY);
// initialization code goes here
}