2010-01-30 282 views
2

我开始接触下的Java EE和Spring Web开发和拥有高水平的设计问题:Spring MVC中,设计问题

我有一个基本的shell设置:我已经编写了一些领域对象(主要是getter和我最终希望显示在页面上的各种对象属性的设置器)。我想知道将所有东西绑在一起的正确方法是一旦我有一些DAO编码。

假设一个简单的博客与各种博客条目。我为包含与条目对应的相应属性的博客条目编写了一个类。控制器访问这些域对象的适当流程是什么,调用合适的DAO,将数据打包到模型中并调用视图?

正如您所看到的,我非常困惑地想知道这一切如何结合在一起,以及分层体系结构应该如何工作。请让我知道是否需要澄清。谢谢。

更新:感谢您的答案!我有另一个问题:应该我的服务层类是单身?有人能解释为什么他们应该/不应该是单身人士吗?谢谢!

+2

请按'向Question'在提出新的问题作为新问题正确的顶部,只是为了避免在答案中的噪音:)不要忘记upvote你发现有用的答案,并接受最有用的答案。 – BalusC 2010-01-31 16:27:49

回答

1

控制器(在2.5+中使用Annotations,以便它是POJO)在服务层类中执行一个方法,该方法被注入。服务层注入DAO以获取持久性对象。业务逻辑位于域对象内部。

+0

谢谢,这正是我正在寻找的。不幸的是我仍然需要一些细节。你能否详细说明(或者指出一些资源)这些看起来究竟如何?具体如何注入看起来等等也是标准的业务逻辑内的域对象? – nick 2010-01-30 00:27:48

+0

我觉得这本书很神奇,但是当我读到它是2.5版之前,所以没有提到注释。它可能已经更新,因为我不太确定 - http://www.amazon.com/Expert-Spring-MVC-Web-Flow/dp/159059584X – bpapa 2010-01-30 07:30:27

1

如果您还没有这样做,请查看Spring MVC分步教程。

Spring MVC tutorial

这会给你如何构建一个简单的Spring MVC Web应用程序的一个很好的例子。

唯一的问题是它没有涵盖在Spring 2.5+中使用Annotations。您将不得不等待Spring 3.0 MVC教程发布,或者亲自查阅官方Spring文档以了解如何使用它。

编辑

下面是一个有关控制形式的例子:

注:弹簧3.0.0

你的控制器:

@Controller 
@RequestMapping("/blog.htm") 
public class BlogController{ 


    // Service layer class 
    private final BlogManager blogManager; 

    // Inject the blog manager into the constructor automatically 
    @Autowired 
    public BlogController(BlogManager blogManager){ 
    this.blogManager = blogManager 
    } 


    // Set up the form and return the logical view name 
    @RequestMapping(method=RequestMethod.GET) 
    public String setupForm(ModelMap model){ 
    model.addAttribute(new EntryForm()); 
    return "addBlog"; 
    } 

    // Executed when posting the form 
    @RequestMapping(method=RequestMethod.POST) 
    public String addBlog(@ModelAttribute("entryForm")EntryForm entryForm){ 
    // Read the entry form command object from the form 
    String text = entryForm.getText(); 

    // Call your service method 
    blogManager.addEntry(text); 

    // Usually redirect to a new logical view name 
    return "redirect:/homepage"; 
    } 

} 

形式的命令对象:

public class EntryForm{ 

    private String text; 

    // setters and getters for text 
} 

这是您的服务层类

public class BlogManager{ 

    private final BlogDAO blogDAO; 

    @Autowired 
    public BlogManager(BlogDAO blogDAO){ 
    this.blogDAO = blogDAO; 
    } 

    public void addEntry(String text){ 
    int blogID = 100; // simple example id for a blog 
    Blog blog = blogDAO.findById(blogID); 
    blog.addEntry(text); 
    blogDAO.update(blog); 
    } 

} 

现在您更新spring.xml文件,将其结合在一起

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


<!-- Scan for spring annotations --> 
<context:component-scan base-package="test.package"/> 

<!-- defined in the xml file and autowired into controllers and services --> 
<bean id="blogManager" class="test.package.BlogManager" /> 
<bean id="blogDAO" class="test.package.dao.BlogDAO" /> 

<!-- Resolves logical view names to jsps in /WEB-INF/jsp folder --> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /property> 
    <property name="prefix" value="/WEB-INF/jsp/"></property> 
    <property name="suffix" value=".jsp"></property>   
</bean> 


</beans> 
+0

我很少阅读本教程。但是,我没有发现任何服务层的概念。我想遵循bpapa的建议。 – nick 2010-01-30 01:18:26

+1

@nick,如果你没有写到第3章,你不会发现关于服务层的任何信息。 http://static.springsource.org/docs/Spring-MVC-step-by-step/part3.html 我编辑了我的答案,包括一个简单的例子,说明如果使用Spring 3.0实现服务层可能看起来如何0.0。 – Christian 2010-01-30 01:39:42

+0

非常感谢你这个...快速的问题:应该服务层类是单身? – nick 2010-01-30 02:19:19