2008-09-26 55 views

回答

1

我想你想Seam,它可以讓你按名稱引用組件。然而,發佈的版本是基於JSF的,但這種情況正在發生變化。

0

只是偶然發現你的問題,因爲我打算這樣做。實際上,您可以使用Spring及其@Configurable註釋(使用AspectJ加載時或編譯時編織)將服務注入到標記實現中。有關所有選項的詳細說明,請參閱Ramnivas的博客文章here

希望能在你仍然需要一個解決方案的情況下幫助...

0

保持對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.