我需要向 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 ,我还没有尝试过,但看起来很简单,你将不得不:
- 配置 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>
实现上下文监听器和模块:
@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/