Tôi mới đến Spring.Làm cách nào để truyền các tham số động tới các bean Spring
Đây là mã đăng ký đậu:
<bean id="user" class="User_Imple"> </bean>
<bean id="userdeff" class="User"> </bean>
và đây là lớp bean tôi:
public class User_Imple implements Master_interface {
private int id;
private User user; // here user is another class
public User_Imple() {
super();
}
public User_Imple(int id, User user) {
super();
this.id = id;
this.user = user;
}
// some extra functions here....
}
và đây là phương pháp chính của tôi để thực hiện thao tác:
public static void main(String arg[]) {
ApplicationContext context = new ClassPathXmlApplicationContext("/bean.xml");
Master_interface master = (Master_interface)context.getBean("user");
// here is my some operations..
int id = ...
User user = ...
// here is where i want to get a Spring bean
User_Imple userImpl; //want Spring-managed bean created with above params
}
Bây giờ tôi muốn gọi hàm tạo này với các tham số và các tham số này được tạo động trong metho chính của tôi ds. Đây là những gì tôi có ý nghĩa bởi tôi muốn truyền động - không tĩnh, như được khai báo trong tệp bean.config
của tôi.
bạn có thể vui lòng trích dẫn tài liệu tham khảo cho lý do tại sao 'tiêm setter' được ưa thích hơn constructor –
"Nhóm nghiên cứu mùa xuân nói chung ủng hộ xây dựng tiêm vì nó cho phép người ta triển khai các thành phần ứng dụng như các đối tượng bất biến và để đảm bảo rằng các phụ thuộc bắt buộc không phải là null ... Setter injection chỉ nên được sử dụng cho các phụ thuộc tùy chọn có thể được gán giá trị mặc định hợp lý trong lớp "- http: // docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/beans.html –
Tôi nghĩ bằng "động" người dùng có nghĩa là anh ta muốn chuyển các đối số trong chính tôi thod, hoặc nói chung tại thời điểm nhận đậu. gọi getBean (...) và các đối số truyền trực tiếp hoạt động, nhưng việc chuyển cuộc gọi này đến một trình định vị (mẫu Service Locator) có thể được thực hiện để tránh sự phụ thuộc vào Spring Framework trong mã của bạn. Locator có thể được chuyển vào như bean thay vào đó, và định vị ApplicationContextAware có thể gọi getBean (bean, arg1, arg2 ...). Bean phạm vi nên được "nguyên mẫu". cũng xem: http://stackoverflow.com/questions/812415/why-is-springs-applicationcontext-getbean-considered-bad –