当前位置: 首页 > 知识库问答 >
问题:

注解:{@org.springframework.beans.factory.annotation.自动配电(必需=true)}

华永逸
2023-03-14

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

org.springframework.beans.factory.BeanCreation异常:创建名为“房间控制器”的bean时出错:自动构建依赖项的注入失败;嵌套异常org.springframework.beans.factory.BeanCreation异常:无法自动构建字段: com. Room.道。Room道com. Room. Controller。RoomController.room道;嵌套异常是org.springframework.beans.factory.NoSuchBean定义异常:没有找到符合依赖项类型[com. Room.道。Room道]的合格bean:预计至少有1个bean符合此依赖项的自动构建候选项的资格。依赖注释:{@org.springframework.beans.factory.annotation.自动构建(必需=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();

}

DaoImpl:

@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 />

共有2个答案

康秋月
2023-03-14

大多数情况下,当您开发springboot应用程序并在其他类中执行依赖项注入时,会出现一个错误

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

这是因为应用程序的Main驻留在包中,例如(com.example.project)

您的其他软件包具有不同的命名结构,例如

com.example.entites,
com.example.services,
com.example.repositories

因此,您的(主类)无法自动找到这些其他包。

要解决这个问题,您必须做的是命名您的其他包以遵循(主)包结构,这样它就会自动扫描它们,这样您就解决了错误bean问题。

所以现在我们的包结构必须(重构)和(重命名)如下:

com.example.project.entities
com.example.project.services
com.example.project.repositories

瞧!!!,主类自动扫描所有其他包,因为它位于其文件夹中。

不要忘记,(一个包)是一个文件夹,因此,所有其他的(包)都存储在(包)中,因此,它可以很容易地找到它里面的其他文件夹。

涂羽
2023-03-14

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

在您的例子中,roomDao是一个bean,必须在初始化时创建它。但在您的情况下,您只是在扫描控制器,因此只会创建控制器bean,而不会创建除com之外的其他控制器bean。房间控制器软件包。

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

所以要扫描所有带注释的类。然后所有必需的(带注释的)bean都将被创建,BeanCreationExctive将被删除。

 类似资料:
  • 主要内容:1. 引入依赖,2. 开启组件扫描,3. 使用注解定义 Bean,4. 基于注解方式实现依赖注入,示例从 Java 5 开始,Java 增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。 Spring 从 2.5 版本开始提供了对注解技术的全面支持,我们可以使用注解来实现自动装配,简化 Spring 的 XML 配置。 Spring 通过注解

  • 本文向大家介绍Spring注解实现自动装配过程解析,包括了Spring注解实现自动装配过程解析的使用技巧和注意事项,需要的朋友参考一下 在IOC容器中学习相关注解(常用) 1. @Autowireda.作用对象:(官网解释) 1. You can apply the @Autowired annotation to constructors: 2.you can also apply the @A

  • 本文向大家介绍Spring Boot 自动配置之条件注解浅析,包括了Spring Boot 自动配置之条件注解浅析的使用技巧和注意事项,需要的朋友参考一下 Spring Boot 神奇的自动配置,主要依靠大量的条件注解来使用配置自动化。 根据满足某一个特定条件创建一个特定的Bean。比如说,在某些系统变量下创建Bean,或者只有在某个Bean创建后才去创建另外一个Bean. 就是根据条件来控制Be

  • 要使用 @Autowired,需要注册 AutowiredAnnotationBeanPostProcessor,可以有以下两种方式来实现: 引入配置文件中的<bean>下引入 <context:annotation-config> <beans> <context:annotation-config /> </beans> 在bean配置文件中直接引入AutowiredAnnotatio

  • 主要内容:1.分析,2.样例讲解1,3.样例讲解2,4.总结1.分析 先看@SpringBootApplication @SpringBootConfiguration:标记当前类为配置类 @EnableAutoConfiguration:开启自动配置 @ComponentScan:扫描主类所在的同级包以及下级包里的Bean @EnableAutoConfiguration: @Import(AutoConfigurationImportSelector.

  • 我有一个Spring Boot Web应用程序,它尝试使用Hibernate访问我的数据库。我还有一个不同的、没有spring boot应用程序,它尝试访问相同的数据库。 我正在使用一个带注释的类配置无Spring Boot应用程序。 由于某些原因,Spring Boots自动配置的作用与注释类配置不同。 如果第一次连接到数据库并使用hibernate ddl创建模式,然后使用另一种配置方式重新连