taglib - >依赖注入pojo /服务如何?

时间:2008-09-26 20:48:40

标签: dependency-injection taglib

使用jsp taglib是否有很好的依赖注入方法?

使用ejb 3.0,spring或guice ......

我想在我的taglibs中使用很多服务/ pojos

3 个答案:

答案 0 :(得分:1)

我认为您需要Seam,它使您能够按名称引用组件。但是,发布的版本是基于JSF的,但这种情况正在发生变化。

答案 1 :(得分:0)

偶然发现了你的问题,因为我打算这样做。实际上,您可以使用Spring及其@Configurable批注(使用AspectJ加载时或编译时编织)将服务注入到标记实现中。有关所有选项的详细说明,请查看Ramnivas的博文here

希望在您仍需要解决方案时提供帮助......

答案 2 :(得分:0)

在servletContext上保留对注入器的引用,然后根据需要在每个标记中使用它。见

在你的Guice设置中:

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.