有沒有一種很好的方式使用jsp taglib進行依賴注入?taglib - >依賴注入pojo /服務如何?
或者使用EJB 3.0,彈簧或吉斯...
我有很多服務/ POJO,唯一的,我想在我的標籤庫使用
有沒有一種很好的方式使用jsp taglib進行依賴注入?taglib - >依賴注入pojo /服務如何?
或者使用EJB 3.0,彈簧或吉斯...
我有很多服務/ POJO,唯一的,我想在我的標籤庫使用
我想你想Seam,它可以讓你按名稱引用組件。然而,發佈的版本是基於JSF的,但這種情況正在發生變化。
只是偶然發現你的問題,因爲我打算這樣做。實際上,您可以使用Spring及其@Configurable註釋(使用AspectJ加載時或編譯時編織)將服務注入到標記實現中。有關所有選項的詳細說明,請參閱Ramnivas的博客文章here。
希望能在你仍然需要一個解決方案的情況下幫助...
保持對ServletContext的注入器的引用,然後在每個標籤使用,你需要它。見
在你的吉斯設置:
public class GuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(blah, blah);
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
ServletContext servletContext = servletContextEvent.getServletContext();
servletContext.removeAttribute(Injector.class.getName());
super.contextDestroyed(servletContextEvent);
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
Injector injector = getInjector();
ServletContext servletContext = servletContextEvent.getServletContext();
servletContext.setAttribute(Injector.class.getName(), injector);
super.contextInitialized(servletContextEvent);
}
}
然後在您的taglib:
@Singleton
@SuppressWarnings("serial")
public class MySampleTag extends TagSupport {
@Inject private MyInjectedService myService;
@Override
public int doStartTag() throws JspException {
Injector injector = (Injector) pageContext.getServletContext().getAttribute(Injector.class.getName());
injector.injectMembers(this);
String value = myService.doSomething();
etc.
etc.