Spring 3 - 如何将业务层与应用层(服务)分开?

时间:2012-06-30 04:23:02

标签: web-applications spring-mvc spring-3

从我看到的情况来看,很多人更喜欢将“业务逻辑”放在一个单独的模块项目中。如何使用Spring 3应用程序完成这项工作?

从我所看到的,控制器和服务是特定于春天的。那是关键吗?如果我选择使用spring,那么分离“逻辑”并直接创建服务(与spring web flow,dao等交互)是没有意义的吗?

我将在稍后使用RESTful Web服务创建一个API,也可以通过Spring创建。这一切都可以在一个应用程序中完成,或者正如我所提到的,是否有某种方法可以将逻辑分开?

例如 - 登录 - 全部通过弹簧安全和弹簧网络流程处理......你猜对了....春天。似乎难以模块化。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

不属于Web的应用程序逻辑(即服务,存储库,数据源等)通常放在一个(或多个)根应用程序上下文中。通过在 web.xml 文件中注册ContextLoaderListener然后相应地配置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

相关问题