2011-07-06 27 views
7

Tôi là một người mới vào mùa xuân và đang cố gắng hiểu khái niệm dưới đây.Nguyên tắc cơ bản của mùa xuân Autowire

Giả sử rằng accountDAO là phụ thuộc của AccountService.

Kịch bản 1:

<bean id="accServiceRef" class="com.service.AccountService"> 
    <property name="accountDAO " ref="accDAORef"/> 
</bean> 

<bean id="accDAORef" class="com.dao.AccountDAO"/> 

Kịch bản 2:

<bean id="accServiceRef" class="com.service.AccountService" autowire="byName"/> 
<bean id="accDAORef" class="com.dao.AccountDAO"/> 

Trong AccountService Class:

public class AccountService { 
    AccountDAO accountDAO; 
    .... 
    .... 
} 

Trong kịch bản thứ hai, thế nào là phụ thuộc tiêm? Khi chúng ta nói nó được autowired bởi Tên, làm thế nào chính xác là nó đang được thực hiện. Tên nào được so khớp khi bắt đầu phụ thuộc?

Cảm ơn trước!

+0

Bản sao có thể có của [Hiểu mùa xuân @Được sử dụng hết hạn] (https://stackoverflow.com/questions/19414734/understanding-spring-autowired-usage) – tkruse

Trả lời

12

Sử dụng @Component và @Autowire, đó là mùa xuân 3,0 cách

@Component 
public class AccountService { 
    @Autowired 
    private AccountDAO accountDAO; 
    /* ... */ 
} 

Đặt một quét thành phần trong bối cảnh ứng dụng của bạn chứ không phải khai báo đậu trực tiếp.

<?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:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:component-scan base-package="com"/> 

</beans> 
+1

Xin lỗi Paul, nhưng nội bộ điều này làm gì? – MAlex

+4

Thành phần quét tìm tất cả các lớp được chú thích @Component trong gói com (theo ví dụ của bạn) và các gói con. Vì vậy, nếu các lớp AccountDAO và AccountService của bạn là @Components, thì Spring sẽ chèn một tệp vào lớp kia. Nó đang sử dụng lớp chứ không phải tên của đậu để làm điều này. Tôi nghĩ rằng điều này đã nổi lên như là phương pháp ưa thích của việc kết nối các phụ thuộc của bạn với nhau bằng cách sử dụng Spring 3.0. Nó làm cho bối cảnh ứng dụng của bạn sạch hơn nhiều và các phụ thuộc chỉ được thể hiện trong mã java, nơi chúng nên. –

+0

Cảm ơn Paul. Hiểu rồi. Nhưng, chúng tôi không yêu cầu phiên bản java cao hơn để sử dụng Spring 3.0. Tôi đang sử dụng 1.4. Tôi tin rằng trong trường hợp đó tôi không thể sử dụng chú thích. – MAlex

3
<bean id="accServiceRef" class="com.service.accountService" autowire="byName"> 
</bean>  
<bean id="accDAORef" class="com.dao.accountDAO"> 
</bean> 

public class AccountService { 
    AccountDAO accountDAO; 
    /* more stuff */ 
} 

Khi mùa xuân tìm thấy tài sản autowire bên accServiceRef đậu, nó sẽ quét các biến bên trong lớp AccountService cho một tên phù hợp. Nếu bất kỳ tên biến mẫu nào khớp với tên bean trong tệp xml, thì bean đó sẽ được đưa vào lớp AccountService. Trong trường hợp này, một kết quả phù hợp được tìm thấy cho accountDAO.

Hy vọng điều đó có ý nghĩa.

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