2010-01-30 234 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