当我运行这段代码时,它显示了这种错误:
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 />
大多数情况下,当您开发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
瞧!!!,主类自动扫描所有其他包,因为它位于其文件夹中。
不要忘记,(一个包)是一个文件夹,因此,所有其他的(包)都存储在(包)中,因此,它可以很容易地找到它里面的其他文件夹。
文档:上下文组件扫描用于扫描类(带注释)以创建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创建模式,然后使用另一种配置方式重新连