2010-03-27 37 views
11

Khi chuyển sang mùa xuân 2.5.x tôi thấy rằng điều ấy tăng thêm chú thích khuôn mẫu (trên đầu trang của @Repository từ 2.0): @Component, @Service@Controller. Làm thế nào để bạn sử dụng chúng? Bạn có dựa vào hỗ trợ Spring ẩn hoặc bạn định nghĩa các khuôn mẫu/khía cạnh/tính năng tùy chỉnh cụ thể? Hoặc là nó chủ yếu để đánh dấu đậu (thời gian biên dịch, khái niệm, vv)?Bạn sử dụng chú thích định dạng trong Spring 2.5.x như thế nào?

+0

Ngữ nghĩa của các chú thích khuôn mẫu khác nhau được ghi lại trong javadoc. – skaffman

Trả lời

13

Các chú thích khuôn mẫu sau trong 2.5 có thể được sử dụng trong một ứng dụng Spring MVC là một thay thế cho dây đậu trong XML:

  • @Repository - cho đậu DAO - cho phép bạn ném DataAccessException khi nguồn dữ liệu không có sẵn.

  • @Service - cho các hạt kinh doanh - là các hạt khá đơn giản có một số chính sách lưu giữ mặc định là .

  • @Controller - cho servlets - cho phép bạn thiết lập yêu cầu trang ánh xạ vv

Bên cạnh đó, một chú thích thứ tư chung đã được giới thiệu: @Component. Tất cả các chú thích MVC là các chuyên ngành của chú thích này và thậm chí bạn có thể sử dụng @Component trên chính nó, mặc dù bằng cách thực hiện điều này trong Spring MVC, bạn sẽ không sử dụng bất kỳ tính năng/tối ưu hóa nào trong tương lai được thêm vào chú thích cấp cao hơn. Bạn cũng có thể mở rộng @Component để tạo các khuôn mẫu tùy chỉnh của riêng bạn.

Dưới đây là một ví dụ nhanh chóng của các chú thích MVC trong hành động ... Thứ nhất, đối tượng truy cập dữ liệu:

@Repository 
public class DatabaseDAO { 
    @Autowired 
    private SimpleJdbcTemplate jdbcTemplate; 

    public List<String> getAllRecords() { 
     return jdbcTemplate.queryForObject("select record from my_table", List.class); 
    } 
} 

Các dịch vụ:

@Service 
public class DataService { 
    @Autowired 
    private DatabaseDAO database; 

    public List<String> getDataAsList() { 
     List<String> out = database.getAllRecords(); 
     out.add("Create New..."); 
     return out; 
    } 
} 

Và cuối cùng, bộ điều khiển:

@Controller("/index.html") 
public class IndexController { 
    @Autowired 
    private DataService dataService; 

    @RequestMapping(method = RequestMethod.GET) 
    public String doGet(ModelMap modelMap) { 
     modelMap.put(dataService.getDataAsList()); 
     return "index"; 
    } 
} 

Tôi đã tìm thấy this article rất tốt để đưa ra một cái nhìn tổng quan rộng về khuôn mẫu anno tations, ngoài các official documentation.

+0

bạn sẽ nói rằng các khuôn mẫu (2.5) mới chỉ áp dụng cho Spring MVC? – topchef

+0

Ba chú thích cấp cao có thể được xem dưới dạng MVC cụ thể.Bạn có thể tái sử dụng chúng cho các mục đích khác, nhưng bạn có thể bị lỗi các vấn đề nâng cấp nếu chúng được thay đổi trong các bản phát hành trong tương lai. @Component là chú thích kết nối chung của bean, và có thể dễ dàng được mở rộng và sử dụng ngoài phạm vi MVC. – seanhodges

0

không quên thêm thẻ này trên xml

<context:component-scan base-package="com.example.beans"/> 
3

Các chú thích không MVC cụ thể nữa. Xem reference documentation để biết thêm thông tin. Ví dụ về việc sử dụng chú thích @Component hoặc đặc điểm kỹ thuật của nó là tcServer với sự hỗ trợ giám sát của nó. Xem here để biết ví dụ. Hỗ trợ giám sát này được thêm vào với thời gian tải AspectJ dệt.

Tóm tắt, các chú thích có thể được sử dụng trong các cài đặt khác nhau khi chạy sau khi vùng chứa Spring được bắt đầu, hoặc khi biên dịch/tải thời gian với dệt AspectJ.

+0

Điều này không hoàn toàn đúng. Chú thích @Component không phải là MVC cụ thể, nhưng những người khác được liệt kê trong câu hỏi của OP là tất cả các MVC cụ thể. – seanhodges

+0

seanhodges: Không, @Repository, @Controller và @Service đều thuộc về mô-đun org.springframework.context. @Endpoint cũng là một chuyên ngành của @Component là Spring WS cụ thể và là một phần của mô-đun org.springframework.ws.java5. Đoạn trích từ tài liệu tham khảo Spring 3 (không phải MVC cụ thể): Trong Spring 2.0 trở lên, chú thích @Repository là dấu hiệu cho bất kỳ lớp nào đáp ứng vai trò hoặc khuôn mẫu (còn được gọi là Đối tượng truy cập dữ liệu hoặc DAO) của một kho lưu trữ. Trong số các công dụng của điểm đánh dấu này là bản dịch tự động của các ngoại lệ. – Espen

Các vấn đề liên quan