【问题标题】:How to run Spring http invoker with java configuration如何使用 java 配置运行 Spring http 调用程序
【发布时间】:2016-11-22 04:54:27
【问题描述】:

如果我有 java 配置,我不太明白如何为 Spring Http Invoker 配置 web.xml 文件。

这里是配置:

@Configuration
@Import(JdbcConfiguration.class)
@EnableWebMvc
public class HttpInvokerConfig {

    @Bean
    public HttpInvokerServiceExporter contactExporter(){
        HttpInvokerServiceExporter contactExporter = new HttpInvokerServiceExporter();
        contactExporter.setServiceInterface(ContactDao.class);
        return contactExporter;
    }

    @Bean
    public HttpInvokerProxyFactoryBean remoteContactService(){
        HttpInvokerProxyFactoryBean remoteContactService = new HttpInvokerProxyFactoryBean();
        remoteContactService.setServiceUrl("http://localhost:8080/experimental/ContactService");
        remoteContactService.setServiceInterface(ContactDao.class);
        return remoteContactService;
    }

}

这里是 web.xml:

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <display-name>Spring HTTP Invoker Sample</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>contactExporter</servlet-name>

        <servlet-class>
            org.springframework.web.context.support.HttpRequestHandlerServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>contactExporter</servlet-name>
        <url-pattern>/remoting/ContactService</url-pattern>
    </servlet-mapping>
</web-app>

我需要在 context-param 中指定什么而不是 xml 的路径,是否可以在没有 web.xml 的情况下运行调用程序(如 servlet 3.0 规范)?

【问题讨论】:

标签: java xml spring spring-mvc


【解决方案1】:

您的配置几乎是正确的。 你缺少的是两件事:

  • HttpInvokerProxyFactoryBean 的 bean 名称必须指定导出器应该监听的 URL
  • HttpInvokerProxyFactoryBean 必须注入 backing bean

另外,我强烈建议不要从导出它的同一个应用程序通过 HTTP 调用 bean。这样做的原因很简单,它会弄乱依赖注入,即remoteContactService 将被注入contactExporter。在应用程序中,通过 HTTP 的往返是没有用的,因为您可以直接调用 bean。

@Configuration
@Import(JdbcConfiguration.class)
@EnableWebMvc
public class HttpInvokerConfig {

    @Bean("/remoting/ContactService")
    public HttpInvokerServiceExporter contactExporter(ContactDao dao){
        HttpInvokerServiceExporter contactExporter = new HttpInvokerServiceExporter();
        contactExporter.setServiceInterface(ContactDao.class);
        contactExporter.setService(dao);
        return contactExporter;
    }
}

【讨论】:

    猜你喜欢
    • 2019-12-04
    • 2014-01-12
    • 2014-11-24
    • 2021-11-16
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多