如何使用匕首初始化Web应用程序?

时间:2014-10-09 17:24:00

标签: dependency-injection dagger servletcontextlistener

我需要在contextInitialized方法中添加什么才能正确初始化对象图?

鉴于这个匕首模块:

@Module
public class MapperModule {

    @Provides
    @Singleton
    ObjectMapper provideObjectMapper() {
        return new ObjectMapper();
    }

}

ServletContextListener的这个子类:

public class DaggerDi implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ObjectGraph objectGraph = ObjectGraph.create(new MapperModule());                
     }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }

}

和web.xml

<web-app>
  <display-name>Archetype Created Web Application</display-name>
   <listener>
    <listener-class>
             com.me.config.DaggerDi
        </listener-class>
   </listener>
</web-app>

1 个答案:

答案 0 :(得分:0)

您可以查看this dagger-servlet project,我还没有尝试过,但看起来很简单,您必须:

  1. 配置servlet(web.xml文件):
  2. <web-app>
        <listener>
            <listener-class>com.example.MyServletContextListener</listener-class>
        </listener>
        <filter>
            <filter-name>Dagger Filter</filter-name>
            <filter-class>com.leacox.dagger.servlet.DaggerFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>Dagger Filter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    
    1. 实现上下文侦听器和模块:

      @Module(injects = {...},includes = ServletModule.class) 公共类MyModule {}

      @Module(injects = {...},includes = ServletRequestModule.class) 公共类MyRequestModule {}

      public class MyServletContextListener extends DaggerServletContextListener {     @覆盖     protected Class [] getBaseModules(){         return new Class [] {MyModule.class};     }

      @Override
      protected Class<?>[] getRequestScopedModules() {
          return new Class<?>[]{MyRequestModule.class};
      }
      

      }

    2. 问候!