注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

新手上路,请多包涵

当我运行这段代码时,它显示了这种错误:

org.springframework.beans.factory.BeanCreationException:创建名为“roomController”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.Room.Dao.RoomDao com.Room.Controller.RoomController.roomDao;嵌套的异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为 [com.Room.Dao.RoomDao] 的符合条件的 bean 依赖项:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

我该如何解决这个错误?

控制器:

 @RestController
@RequestMapping("/service/user/")
public class RoomController {

@Autowired
RoomDao roomDao;

@RequestMapping(method = RequestMethod.GET,headers="Accept=application/json")
public String getAllUsers() {
    String users="hello welcome";
    return users;
}

public List<RoomMembers> getRoomMembers() {
    List<RoomMembers> roomMemberList=roomDao.listMember();
    //User user=userService.getUserById(id);
    return roomMemberList;
}
}

模型类:

 @Entity
@Table(name="RoomMembers")
public class RoomMembers{

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "memberId")
private int memberId;

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

@Column(name="Phone")
private long phone;

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

public int getMemberId() {
    return memberId;
}

public void setMemberId(int memberId) {
    this.memberId = memberId;
}

public String getMemberName() {
    return memberName;
}

public void setMemberName(String memberName) {
    this.memberName = memberName;
}

public long getPhone() {
    return phone;
}

public void setPhone(long phone) {
    this.phone = phone;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

}

道:

 public interface RoomDao {

public List<RoomMembers> listMember();

}

道实现:

 @Repository
@Transactional
public class RoomDaoImpl implements RoomDao{

@Autowired
private SessionFactory sessionFactory;

@SuppressWarnings("unchecked")
public List<RoomMembers> listMember() {
    List<RoomMembers> roomMemberList= (List<RoomMembers>)  sessionFactory.getCurrentSession().createCriteria(RoomMembers.class).list();
    return roomMemberList;
}

}

XML:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

    <context:property-placeholder location="classpath:resources/database.properties" />
<context:component-scan base-package="com.Room.Controller" />
<tx:annotation-driven transaction-manager="hibernateTransactionManager"/>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${database.driver}" />
    <property name="url" value="${database.url}" />
    <property name="username" value="${database.user}" />
    <property name="password" value="${database.password}" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses">
    <list>
        <value>com.Room.Model.RoomMembers</value>
    </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
        </props>
    </property>
</bean>

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

原文由 Manihtraa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

文档: 上下文组件扫描用于扫描类(带注释)以创建 bean。

在您的情况下 roomDao 是一个必须在初始化时创建的 bean。但是在您的情况下,您只是在扫描控制器,因此只会创建控制器 bean,而 不会 创建除 com.Room.Controller 包以外的其他控制器 bean。

  <context:component-scan base-package="com.Room.Controller" />

所以 让它扫描所有带注释的类。然后将创建所有必需的(带注释的)bean BeanCreationException 将开始。

原文由 Prasanna Kumar H A 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有同样的错误,我需要解决方案:

 @Service

在我的服务中。我希望能帮助你。 XD

原文由 Miguel Vega 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题