2011-12-26 14 views
5

Tôi nhận được lỗi nàyKhông thể autowire phương pháp

org.springframework.beans.factory.BeanCreationException: 
Could not autowire method: 

Đây là cấu hình xml mùa xuân của tôi.

<bean ...> 
... 
    <property name="InfoModel" ref="InfoModel"></property> 
</bean> 

Đây là mã của tôi, nơi tôi đang autowiring này trong lớp Java

private InfoModel infoModel; 

    @Autowired 
    public void setInfoModel(InfoModel infoModel) { 
    this.infoModel= infoModel; 
    } 

Tôi có thiếu cái gì đó. Tôi nghi ngờ rằng tôi nên tạo một số Interface của InfoModel để làm cho nó tự động?

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.model.InfoModel] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:547) 
+1

Bạn có thể đăng lớp InfoModel không? Tôi cho rằng đó là một lớp cụ thể. –

+2

bạn có thể vui lòng đăng thêm một chút thông tin về dấu vết ngăn xếp ngoại lệ của bạn –

+0

Lớp InfoModel chỉ khởi tạo một số giá trị trong đó. –

Trả lời

11

nếu bạn làm @Autowired bạn không cần đánh dấu nó là thuộc tính trong xml. chỉ cần khai báo InfoModel như đậu trong XML và loại bỏ property từ xml cho bạn đậu mà bạn đã tiêm InfoModel

Tổng hợp

Bạn cần một định nghĩa bean trong XML của bạn cho InfoModel

Bạn cần xóa property khỏi XML

Đảm bảo bạn đã tạo ngữ cảnh của mình chú thích được thúc đẩy bằng cách thêm

<context:annotation-config /> 
+0

Nếu anh ấy sử dụng chú thích, anh ta có thể chỉ đặt '@ Component' ở cấp loại' InfoModel' thay vì đưa vào XML.Mặc dù nó rất giống nhau. –

0

Tôi nghĩ bạn nên viết @Thông báo trước thông tin cá nhân .... Tuyên bố. và xóa mục nhập khỏi xml như được đề cập bởi jigar.

+0

Đặt chú thích '@ Autowired' trong một trường hoặc trong một trình truy cập phương thức là giống nhau. –

0

Bạn đã chú thích đúng lớp học InfoModel của mình với Chú thích cấp loại như vậy @Component, @Service hoặc @Repository. Tất cả chúng đều rất giống nhau. Nếu InfoModel của bạn không được chú thích đúng cách, bạn sẽ nhận được lỗi "Không phù hợp với bean ..." nổi tiếng này. Cố gắng chú thích lớp InfoModel của bạn với @Component trông như thế này:

@Component 
public class InfoModel { 
    // code 
} 
1

Nếu stack trace nói không có đậu kết hợp của kiểu nói, thì đó là những gì sai.

Thêm hạt InfoModel vào ngữ cảnh ứng dụng mùa xuân, ví dụ: bằng cách khai báo bean trong cùng cấu hình xml:

<bean id="InfoModel" class="com.model.InfoModel" /> 

btw. bạn không nên viết hoa chữ cái đầu tiên của mã định danh bean, hãy thực hiện theo quy ước đặt tên giống như đối với các biến, ví dụ: lowerCamelCase. Autowiring và rõ ràng tiêm phụ thuộc cũng là dư thừa.