2012-01-22 27 views
57

sau một vài ngày cố gắng và chờ đợi câu trả lời trên diễn đàn lò xo tôi sẽ thử tại đây. Chạy kết quả ứng dụng của tôi trong những ngoại lệ:Không có loại đậu phù hợp ... được tìm thấy cho sự phụ thuộc

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.my.services.user.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    java.lang.Thread.run(Thread.java:662) 

Dưới đây là các mã có liên quan

đơn ngữ cảnh:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="jdbc:postgresql://localhost:5432/test" /> 
    <property name="username" value="test" /> 
    <property name="password" value="test" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.example.my.entities.*" /> 
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
     <prop key="hibernate.show_sql">true</prop> 
    </props> 
    </property> 
</bean> 

<tx:annotation-driven /> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

com.example.my.entities.user:

@Entity 
@Table(name = "tbl_users") 
public class User 
{ 
    @Id 
    @Column(name = "id") 
    @GeneratedValue 
    private int id; 

    @Column(name = "username") 
    private String username; 

    @Column(name = "password") 
    private String password; 

    public void setId(int id) 
    { 
    this.id = id; 
    } 

    public int getId() 
    { 
    return id; 
    } 

    public void setUsername(String username) 
    { 
    this.username = username; 
    } 

    public String getUsername() 
    { 
    return username; 
    } 

    public void setPassword(String password) 
    { 
    this.password = password; 
    } 

    public String getPassword() 
    { 
    return password; 
    } 
} 

dịch vụ:

@Service 
public class UserServiceImpl implements UserService 
{ 
    @Autowired 
    private UserDAO userDAO; 

    @Override 
    @Transactional 
    public void addUser(User user) 
    { 
    userDAO.addUser(user); 
    } 

    @Override 
    @Transactional 
    public List<User> listUsers() 
    { 
    return userDAO.listUsers(); 
    } 

    @Override 
    @Transactional 
    public void removeUser(int id) 
    { 
    userDAO.removeUser(id); 
    } 
} 
+0

Chúng ta cũng cần xem cấu hình Spring servlet. – skaffman

Trả lời

118

Nhiều điều có thể gây ra điều này, tôi không bận tâm để kiểm tra toàn bộ kho lưu trữ của bạn, vì vậy tôi đi ra ngoài cánh một ở đây.

Trước hết, bạn có thể thiếu chú thích (@Service hoặc @Component) từ việc triển khai com.example.my.services.user.UserService, nếu bạn đang sử dụng chú thích để định cấu hình. Nếu bạn đang sử dụng (chỉ) xml, bạn có thể thiếu định nghĩa <bean> cho việc triển khai UserService.

Nếu bạn đang sử dụng chú thích và việc triển khai được chú thích một cách chính xác, hãy kiểm tra xem gói có thực hiện được quét hay không (hãy kiểm tra <context:component-scan base-package= -giá trị) của bạn.

+6

Cảm ơn, điều đó đã giúp tôi rất nhiều! Gói cơ bản của tôi là com.example.my.web.controller vì tôi nghĩ tôi chỉ cần đường dẫn đến các bộ điều khiển. Thay đổi thành com.example.my để bao gồm tất cả các lớp cần thiết (dao, dịch vụ, thực thể, bộ điều khiển) và nó hoạt động tốt! oh và tôi đã thay đổi lớp nhà máy phiên thành org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean và loại bỏ thuộc tính configurationClass. – dtrunk

+0

Trong trường hợp của tôi, giao diện đã có mặt nhưng lớp triển khai bị thiếu. Đã thêm lớp đó với @service và sự cố được giải quyết. Cảm ơn. –

+0

Thực ra đó là tên gói. – Xcoder

13

Thêm này để bạn applicationContext:

<bean id="userService" class="com.example.my.services.user.UserServiceImpl "> 
+0

Cảm ơn bạn, vì câu trả lời của bạn đã giúp tôi tìm ra rằng nó không bao gồm tất cả các lớp học của tôi. – dtrunk

10

Thêm chú thích @Repository vào phần đầu của userDao Class.Nếu userDao là một giao diện, hãy thêm chú thích này vào phần thực hiện của giao diện.

1

Tôi đã có một vấn đề tương tự nhưng tôi đã thiếu (@Service hoặc @Component) từ việc thực hiện com.example.my.services.myUser.MyUserServiceImpl

0

tôi đã cùng một vấn đề nhưng trong trường hợp của tôi, lớp được triển khai vô tình trở thành 'trừu tượng' như một kết quả tự động không thành công.

6

Tôi gặp sự cố tương tự trong cấu hình thử nghiệm, vì sử dụng AOP. Tôi đã thêm dòng mã này vào spring-config.xml

<aop:config proxy-target-class="true"/> 

Và nó hoạt động!

1

NẾU điều này chỉ xảy ra khi triển khai, hãy đảm bảo rằng bạn có sự phụ thuộc của gói bạn đang tham chiếu trong .war. Ví dụ, điều này đã được làm việc cục bộ trên máy tính của tôi, với cấu hình gỡ lỗi làm việc tốt, nhưng sau khi triển khai đến cây đàn hồi của Amazon, tôi nhận được lỗi này và nhận thấy một trong những phụ thuộc không được gói trong gói .war.

+0

Bạn cũng có thể tư vấn cách làm cho gói phụ thuộc được đưa vào .war? – LoBo

1

Trong trường hợp của tôi, đó là sự phụ thuộc sai cho CrudRepository. IDE của tôi cũng thêm vào follwing:

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-commons</artifactId> 
     <version>1.11.2.RELEASE</version> 
    </dependency> 

Nhưng tôi chỉ cần thiết:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
     <version>RELEASE</version> 
    </dependency> 

Tôi đã gỡ bỏ cái đầu tiên và tất cả mọi thứ vẫn ổn.

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