我有一个使用的设置,这样我就可以以标准的方式注册servlet。
在使用WAR之前,servlet是一个单例,我可以在其中注入其他osgi引用。使用扩展程序,服务会因为声明性服务XML而被注入,但是当我使用浏览器访问Servlet时,就会创建一个新实例,而不需要注入其他服务。
@Component
@SuppressWarnings("serial")
@WebServlet(name="TestServlet", urlPatterns={"/Test"})
public class TestServlet extends HttpServlet{
private UserDataManager userDataManager;
public TestServlet(){
System.out.println("------------------- New Servlet");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
MbsSessionId mbsId = (MbsSessionId)session.getAttribute("MbsSessionId");
UserData userData = userDataManager.getUserData(mbsId);
resp.getOutputStream().println(userData.toString());
}
@Reference
void bindUserDataManager(UserDataManager userDataManager){
this.userDataManager = userDataManager;
}
}我的目标是避免以编程方式调用。是否有任何配置,因此我的Servlet被视为Singleton,或者OSGi-服务被重新注入?
发布于 2015-03-10 07:24:38
https://stackoverflow.com/questions/28945446
复制相似问题