1

我正在尝试将我们基于 Spring 的 Web 应用程序从 Tomcat 8 迁移到 Undertow。

我们使用 Spring 的 WebApplicationInitializer 进行 Spring-MVC 和 HibernateTransactionManager 的编程配置。

有一个ServletContainerInitializerInfo(Javadoc)似乎可以满足我的目的,例如我可以实例化它,然后按照 Undertow 文档(链接)中给出的步骤启动服务器:

ServletContainerInitializerInfo sciInfo = 
    new ServletContainerInitializerInfo(containerInitializerClass,
        instanceFactory, handlesTypes);

DeploymentInfo servletBuilder = Servlets.deployment()
    .addServletContainerInitalizer(sciInfo);

DeploymentManager manager = Servlets.defaultContainer()
    .addDeployment(servletBuilder);
manager.deploy();

PathHandler path = Handlers.path(Handlers.redirect("/myapp"))
    .addPrefixPath("/myapp", manager.start());

Undertow server = Undertow.builder()
        .addHttpListener(8080, "localhost")
        .setHandler(path)
        .build();
server.start();

问题是我不知道在调用构造函数时用什么代替instanceFactory和参数。此外,方法的名称拼写错误(应该是 Initializer 而不是 Initalizer)。handlesTypesServletcontainerInitializerInfoaddServletContainerInitalizer

有人可以帮忙吗?

谢谢!

4

1 回答 1

4

UndertowInstanceFactory<T>用作依赖注入或实例化后给定类的实例的其他自定义的扩展点。

参数将是与servlet 容器初始化程序上的注释handlesTypes对应的所有类的集合。@HandlesTypes

如果您的初始化程序没有@HandlesTypes并且不需要依赖注入,您可以简单地试试这个:

MyInitializer initializer = new MyInitializer();

InstanceFactory<MyInitializer> instanceFactory 
    = new ImmediateInstanceFactory<>(initializer);

ServletContainerInitializerInfo sciInfo = 
    new ServletContainerInitializerInfo(MyInitializer.class,
        instanceFactory, new HashSet<Class<?>>());
于 2015-01-10T17:29:05.130 回答