2012-07-05 29 views
5

Có thể vào mùa xuân để tự động chỉ đối số cụ thể của một hàm tạo không?Tự động phát một số đối số nhất định của một hàm tạo

tôi định nghĩa:

<bean class="MyClass"> 
    <constructor-arg name="name" value="object name" /> 
</bean> 

Với:

public class MyClass{ 
    private String name; 
    private MyDAO dao; 

    @Autowired 
    public MyClass(String name, MyDao dao){ 
     // assign... 
    } 

    // ... 
} 

Bây giờ tôi muốn MyDao đối tượng được autowired, trong khi xác định một cách rõ ràng name tranh cãi. Có thể không?

Xác định bean bằng XML yêu cầu xác định thủ công tất cả đối số?

Trả lời

3

Bạn không thể làm điều đó với các nhà xây dựng autowired, bởi vì nó ảnh hưởng đến tất cả các thông số, nhưng bạn có thể làm điều này:

public class MyClass{ 
    private String name; 

    @Autowired 
    private MyDAO dao; 

    public MyClass(String name){ 
     // assign only name 
    } 

    // ... 
} 

Nó tương tự như việc có một setter cho DAO nhưng bạn không để lộ công khai đó trong lớp học của bạn.

+0

ok, vì vậy tôi phải thay đổi contructor của mình ... hoặc sử dụng tham chiếu rõ ràng trong định nghĩa XML của tôi ... – davioooh

+0

Có, điều đó phụ thuộc vào phần còn lại của dự án của bạn, nếu nó sử dụng autowiring cho hầu hết các tham chiếu bean hoặc định nghĩa rõ ràng trong XML, để duy trì tính nhất quán. – Luciano

+0

Cảm ơn bạn rất nhiều. – davioooh

2

Nếu tôi đọc câu hỏi của bạn một cách chính xác, bạn sẽ hỏi xem bạn có thể nối dây trong trường hợp MyDao mà bạn đã xác định ở nơi khác trong ngữ cảnh hay không và cung cấp giá trị chuỗi mã hóa cứng cho tham số tên. Nếu điều đó là đúng, bạn sẽ cấu hình lớp học của bạn như

<bean class="MyClass"> 
    <constructor-arg value="Hardcoded string value for the name" /> 
    <constructor-arg ref="myDaoInstance" /> 
</bean> 

Và ở đâu đó trong tập tin ngữ cảnh của bạn

<bean class="MyDao" id="myDaoInstance> 
    //relevant config 
</bean> 
+0

đó là một gợi ý tốt, cảm ơn! +1 – davioooh

0

Có vẻ như bạn nên thêm @Autowired đến dao MyDao; khai báo, sau đó thay đổi hàm tạo của bạn để chỉ lấy tên param. Bạn sẽ tự động có thể truy cập MyDao

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