我建立與Spring /休眠/的Restlet /碼頭REST服務,我什麼我認爲是一個簡單的任務掙扎:注入依賴到的Restlet ServerResource使用Spring IoC
我需要注入DAO實現(即UserDao)到ServerResource(本例中爲UserServerResource)。
我使用SpringRouter豆建立路由到該資源在Spring XML配置:
<bean name="restlet-user-server-resource"
class="project.server.rest.UserServerResource"
scope="prototype" />
<bean name="restlet-api-server-application"
class="org.restlet.Application">
<property name="inboundRoot">
<bean class="org.restlet.ext.spring.SpringRouter">
<constructor-arg ref="restlet-api-server-application" />
<property name="attachments">
<map>
<entry key="/user/{userId}"
value-ref="restlet-user-server-resource" />
</map>
</property>
</bean>
</property>
</bean>
而且我試圖注入DAO既作爲@Autowired和bean的屬性(在「的Restlet -user-server-resource「bean p:userDao-ref =」user-dao「)。
userDAO的規定爲:
<bean name="user-dao,userDao"
parent="dao-tx-template">
<property name="target">
<bean class="project.server.data.dao.UserDao"
p:sessionFactory-ref="session-factory" />
</property>
</bean>
應該注意的是,的getBean(「用戶道」)按預期工作,並返回userDAO的充分準備實例。
我嘗試以下操作:
- 當使用的getBean從Spring上下文直接需要的Restlet用戶的服務器資源豆,內部userDAO的爲空。
- 當Restlet直接實例化UserServerResource類(所以,爲SpringRouter提供字符串而不是ref)時,內部userDao爲null。
- 當Spring如上所述實例化bean時,internal userDao爲null。
另外,在兩者(1)和(3)中,誤差由的Restlet發:在映射發現未知的對象。只允許Restlet的實例和org.restlet.resource.Resource和ServerResource的子類。
將當前UserServerResource實現(這是什麼,只是爲基礎建立一個模擬):
package project.server.rest;
import org.restlet.resource.ResourceException;
import org.restlet.resource.ServerResource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import project.server.data.dao.UserDao;
import project.server.data.entities.User;
import project.server.rest.interfaces.UserResource;
@Configurable
public class UserServerResource
extends ServerResource
implements UserResource
{
private int userId;
@Autowired
private UserDao userDao;
@Override
public void doInit() throws ResourceException
{
String userIdString = (String)this.getRequestAttributes().get("userId");
this.userId = Integer.parseInt(userIdString);
}
@Override
public User represent()
{
System.out.println(this.userDao);
User user = new User();
user.setId(this.userId);
user.setUserName("Something");
user.setEmailAddress("[email protected]");
return (user);
}
public void setUserDao(UserDao dao)
{
this.userDao = dao;
}
public UserDao getUserDao()
{
return (this.userDao);
}
}
我希望我儘可能多的信息儘可能提供。 謝謝你的任何建議!