jsp taglib を使用して依存関係を注入する良い方法はありますか?
ejb 3.0、Spring、または Guice のいずれかを使用...
taglibs で使用したいサービス/pojo がたくさんあります
jsp taglib を使用して依存関係を注入する良い方法はありますか?
ejb 3.0、Spring、または Guice のいずれかを使用...
taglibs で使用したいサービス/pojo がたくさんあります
Seamが必要だと思います。コンポーネントを名前で参照できます。ただし、リリースされたバージョンは JSF ベースですが、それは変更されています。
私は同じことをする予定なので、あなたの質問に出くわしました。実際には、Spring とその @Configurable アノテーション (AspectJ のロード時またはコンパイル時のウィービングを使用) を使用して、サービスをタグ実装に挿入できます。すべてのオプションの詳細な説明については、Ramnivas のブログ投稿をご覧ください。
それでも解決策が必要な場合に備えて、お役に立てば幸いです...
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.