dependency-injection - 如何用 Dagger 初始化网络应用程序?

标签 dependency-injection dagger servletcontextlistener

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

给定这个 Dagger 模块:

@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>

最佳答案

可以查看this dagger-servlet project ,我还没有尝试过,但看起来很简单,你将不得不:

  1. 配置 servlet(web.xml 文件):
<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(注入(inject) = {...},包括 = ServletModule.class) 公共(public)类 MyModule {}

    @Module(注入(inject) = {...},包括 = ServletRequestModule.class) 公共(public)类 MyRequestModule {}

    公共(public)类 MyServletContextListener 扩展 DaggerServletContextListener { @覆盖 protected 类 [] getBaseModules() { 返回新类[]{MyModule.class};

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

问候!

关于dependency-injection - 如何用 Dagger 初始化网络应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284406/

相关文章:

kotlin - 为什么 Dagger 需要提供我不想提供的实体?

java - 如何从 Jsp 页面按钮单击中使用 ServletContextListener 命中 servlet 类

grails - 引导完成后,Grails执行服务方法

java - 如何使用Spring框架将同一个类的2个实例注入(inject)另外2个不同的类?

javascript - Nest.js : how to override providers in an imported module?

c# - 如何在 ASP.NET MVC Web 应用程序中使用 Ninject?

java - ServletContextListener 是否调用每次机器重启时调用的方法

java - Spring - @Named 和 @Component 之间的区别

android - Dagger 项目在 getApplication 覆盖时静默失败

android - 从父 android 模块访问 Dagger 子组件依赖项