0

从我所见,许多人更喜欢将“业务逻辑”放在单独的模块项目中。这是如何使用 Spring 3 应用程序完成的?

从我所见,控制器和服务是非常特定于 spring 的。这是重点吗?如果我选择使用spring,那么将“逻辑”分开并直接创建服务(与spring web flow、dao等交互)没有意义吗?

稍后我将使用 RESTful Web 服务创建一个 API,同样通过 Spring。这一切都可以在一个应用程序中完成吗,或者正如我提到的,有什么方法可以拆分逻辑吗?

例如 - 登录 - 全部通过 Spring Security 和 Spring Web Flow 处理,......你猜对了...... 似乎很难模块化。

但是,假设我有一项服务可以根据客户信息生成 PDF .... 那是我应该分开的吗?

谢谢!

4

1 回答 1

1

一般来说,Spring 的DispatcherServlet负责 REST 服务。它的 Web 应用程序上下文包含控制器、视图解析器、处理程序映射等。

不属于 Web 的应用程序逻辑,即服务、存储库、数据源等,通常放置在一个(或多个)根应用程序上下文中ContextLoaderListener通过在web.xml文件中注册 a 将其导入应用程序,然后进行contextConfigLocation相应的配置。如果使用 Spring 安全,则在此处添加安全应用程序上下文。

例子:

<web-app ...>
    <!-- Enables Spring root application context-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- One (or more) root application contexts -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/rootApplicationContext.xml</param-value>
    </context-param>

    <!-- Servlet declaration. Each servlet has is its own web application context -->
    <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>/example/*</url-pattern>
    </servlet-mapping>
</web-app>

此设置允许 Web 应用程序上下文继承在根应用程序上下文中声明的任何 bean。

请注意,按照惯例,用于特定 servlet 的 Web 应用程序上下文位于/WEB-INF/[servlet-name]-servlet.xml中,即上面示例的/WEB-INF/example-servlet.xml

于 2012-06-30T08:43:25.507 回答