Dependency injection 如何使用dagger初始化web应用程序?

Dependency injection 如何使用dagger初始化web应用程序?,dependency-injection,dagger,servletcontextlistener,Dependency Injection,Dagger,Servletcontextlistener,我需要向contextInitialized方法添加什么才能正确初始化对象图 鉴于此匕首模块: @Module public class MapperModule { @Provides @Singleton ObjectMapper provideObjectMapper() { return new ObjectMapper(); } } ServletContextListener的此子类: public class DaggerDi

我需要向
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>

Web应用程序创建的原型
com.me.config.DaggerDi
您可以检查,我还没有尝试过,但看起来很简单,您必须:

  • 配置servlet(web.xml文件):
  • 
    com.example.MyServletContextListener
    匕首过滤器
    com.leacox.dagger.servlet.DaggerFilter
    匕首过滤器
    /*
    
  • 实现上下文侦听器和模块:

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

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

    公共类MyServletContextListener扩展了DaggerServletContextListener{ @凌驾 受保护类[]getBaseModules(){ 返回新类[]{MyModule.Class}; }

    @覆盖
    受保护类[]getRequestScopedModules(){
    返回新类[]{MyRequestModule.Class};
    }
    
    }

  • 问候

    <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>
    
    @Override
    protected Class<?>[] getRequestScopedModules() {
        return new Class<?>[]{MyRequestModule.class};
    }