Tôi đang cố gắng tiêm một hàm tạo cần một số đối số. Sau khi biên dịch Spring phàn nàn nó không thể tìm thấy một constructor mặc định (tôi đã không định nghĩa nó) và ném BeanInstatiationException và NoSuchMethodException.Có phải hàm tạo mặc định được yêu cầu trong Spring injection không?
Sau khi xác định hàm khởi tạo mặc định, các ngoại lệ không xuất hiện nữa, tuy nhiên đối tượng của tôi không bao giờ được khởi tạo với hàm tạo đối số, chỉ có một hàm mặc định được gọi. Spring có thực sự yêu cầu một constructor mặc định trong trường hợp này không? Và nếu có, làm thế nào tôi có thể làm cho nó sử dụng constructor đối số thay vì một mặc định?
Đây là cách tôi dây tất cả mọi thứ: Cấu hình
public class Servlet {
@Autowired
private Module module;
(code that uses module...)
}
@Component
public class Module {
public Module(String arg) {}
...
}
Bean:
<beans>
<bean id="module" class="com.client.Module">
<constructor-arg type="java.lang.String" index="0">
<value>Text</value>
</constructor-arg>
</bean>
...
</beans>
Stack trace:
WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xsd
ERROR initWebApplicationContext, Context initialization failed
[tomcat:launch] org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'module' defined in URL [...]: Instantiation of bean failed;
nested exception is org.springframework.beans.BeanInstantiationException: Could not
instantiate bean class [com.client.Module]: No default constructor found; nested
exception is java.lang.NoSuchMethodException: com.client.Module.<init>()
Spring không yêu cầu hàm tạo mặc định (nghĩa là no-args, right?). Thêm stacktrace vào bài viết, nếu không tôi không nghĩ rằng chúng tôi có đủ thông tin để kể những gì đang xảy ra. –
Đã thêm dấu vết ngăn xếp. Và có, theo mặc định tôi có nghĩa là constructor không có arg. – agerrr