从我看到的情况来看,很多人更喜欢将“业务逻辑”放在一个单独的模块项目中。如何使用Spring 3应用程序完成这项工作?
从我所看到的,控制器和服务是特定于春天的。那是关键吗?如果我选择使用spring,那么分离“逻辑”并直接创建服务(与spring web flow,dao等交互)是没有意义的吗?
我将在稍后使用RESTful Web服务创建一个API,也可以通过Spring创建。这一切都可以在一个应用程序中完成,或者正如我所提到的,是否有某种方法可以将逻辑分开?
例如 - 登录 - 全部通过弹簧安全和弹簧网络流程处理......你猜对了....春天。似乎难以模块化。
但是,我说有一项服务可以根据客户信息生成PDF ....这应该是我应该分开的吗?
谢谢!
答案 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 。