Есть ли хороший способ инъекции с использованием jsp taglib?taglib -> зависимость инъекции pojo/сервис как?
либо с использованием EJB 3.0, весной или Guice ...
У меня есть много услуг/POJOs, что я хотел бы использовать в своих библиотеках тегов
Есть ли хороший способ инъекции с использованием jsp taglib?taglib -> зависимость инъекции pojo/сервис как?
либо с использованием EJB 3.0, весной или Guice ...
У меня есть много услуг/POJOs, что я хотел бы использовать в своих библиотеках тегов
Я думаю, что вы хотите Seam, это позволяет для ссылки на компонент по имени. Однако выпущенная версия основана на JSF, но это меняется.
просто наткнулся на ваш вопрос, потому что я планирую сделать то же самое. Фактически вы можете использовать Spring и его @Configurable аннотацию (с использованием времени загрузки AspectJ или созревания во время компиляции) для внедрения сервисов в ваши реализации тегов. Для подробного объяснения всех вариантов взгляните на сообщение блога Рамниваса here.
Надежда, чтобы помочь в случае, если вы все еще нужно решение ...
Держите ссылку на ваш инжектор на 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.