创建名为“homeController”的 bean 时出错:自动装配依赖项的注入失败
Posted
技术标签:
【中文标题】创建名为“homeController”的 bean 时出错:自动装配依赖项的注入失败【英文标题】:Error creating bean with name 'homeController': Injection of autowired dependencies failed 【发布时间】:2019-06-10 19:32:55 【问题描述】:我正在尝试在春季创建电子商务。在我的项目中包含“Hibernate”和“H2”数据库后,我得到了错误。错误如下。我非常努力,但没有找到任何解决方案。
错误:
org.springframework.beans.factory.BeanCreationException: 错误 创建名为“homeController”的bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire 字段:私有 com.home.dao.ProductDao com.home.controller.homeController.productDao;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建名为 'productDaoImpl' 的 bean:注入 autowired 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 自动装配字段:私有 org.hibernate.SessionFactory com.home.dao.impl.ProductDaoImpl.sessionFactory;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 创建 ServletContext 中定义的名称为“sessionFactory”的 bean 资源[/WEB-INF/applicationContext.xml]:init方法的调用 失败的;嵌套异常是 org.hibernate.exception.GenericJDBCException:无法打开 JDBC DDL 执行连接
applicationContext.xml
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver" />
<property name="url" value="jdbc:h2:~/test" />
<property name="username" value="sa" />
<property name="password" value="" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="packagesToScan">
<list>
<value>com.home</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
home-servlet.xml
<context:component-scan base-package="com.home">
<context:include-filter type="aspectj" expression="com.home.*" />
</context:component-scan>
<mvc:annotation-driven />
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping="/resources/**"
location="/WEB-INF/resources/" cache-period="31556926" />
<tx:annotation-driven />
web.xml
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/home-servlet.xml,
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<servlet>
<servlet-name>home</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
homeController.java
@Controller
@Configuration
public class homeController
@Autowired
private ProductDao productDao;
@RequestMapping("/")
public String home()
return "views/home";
@RequestMapping("/productList")
public String getProducts(Model model)
List<Product> products = productDao.getAllProducts();
model.addAttribute("products", products);
return "views/productList";
@RequestMapping("/productList/viewProduct/productId")
public String viewProduct(@PathVariable String productId, Model model) throws IOException
Product product = productDao.getProductById(productId);
model.addAttribute(product);
return "views/viewProduct";
ProductDaoImpl.java
@Repository
@Transactional
public class ProductDaoImpl implements ProductDao
@Autowired
private SessionFactory sessionFactory;
public void addProduct(Product product)
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(product);
session.flush();
public Product getProductById(String id)
Session session = sessionFactory.getCurrentSession();
Product product = (Product) session.get(Product.class, id);
session.flush();
return product;
public List<Product> getAllProducts()
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from Product");
List<Product> products = query.list();
session.flush();
return products;
public void deleteProduct (String id)
Session session = sessionFactory.getCurrentSession();
session.delete(getProductById(id));
session.flush();
Product.java 代码:
@Entity
公共类产品
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String productId;
private String productName;
private String productCategory;
private String productDescription;
private double productPrice;
private String productCondition;
private String productStatus;
private int unitInStock;
private String productManufacturer;
public String getProductId()
return productId;
public void setProductId(String productId)
this.productId = productId;
public String getProductName()
return productName;
public void setProductName(String productName)
this.productName = productName;
public String getProductCategory()
return productCategory;
public void setProductCategory(String productCategory)
this.productCategory = productCategory;
public String getProductDescription()
return productDescription;
public void setProductDescription(String productDescription)
this.productDescription = productDescription;
public double getProductPrice()
return productPrice;
public void setProductPrice(double productPrice)
this.productPrice = productPrice;
public String getProductCondition()
return productCondition;
public void setProductCondition(String productCondition)
this.productCondition = productCondition;
public String getProductStatus()
return productStatus;
public void setProductStatus(String productStatus)
this.productStatus = productStatus;
public int getUnitInStock()
return unitInStock;
public void setUnitInStock(int unitInStock)
this.unitInStock = unitInStock;
public String getProductManufacturer()
return productManufacturer;
public void setProductManufacturer(String productManufacturer)
this.productManufacturer = productManufacturer;
ProductDao.java 代码: 公共接口 ProductDao
void addProduct(Product product);
Product getProductById(String id);
List<Product> getAllProducts();
void deleteProduct(String id);
项目结构或目录图片: Project Structure or Directory at my Eclipse Oxygen IDE
【问题讨论】:
可以分享一下目录结构和ProductDao
吗?
#Nicholas K,请查看更新帖子,我在其中添加了 ProductDao .java 代码并检查了我的项目目录结构的图像。坦克供您发表评论。
【参考方案1】:
最后,我在使用 IntelliJ IDEA IDE 时发现了自己的问题。问题如下:
我的问题出现在 pom.xml 文件中。在这里,我使用了 hibernate-core 最新版本 (5.4.0.Final) 依赖,它不支持 import org.hibernate.Query;包,也不支持 Query query = session.createQuery("from Product"); 和 Product product = (Product) session.get(Product.class, id); ProductDaoImpl.java 类中的代码。
我还在 使用了最新版本的 spring-webmvc、spring-core 和 spring-orm 依赖项pom.xml 文件。因此会发生版本冲突。
解决方案:
忘记 Eclipse 并避免它。请使用 IntelliJ IDEA。这是一个非常用户友好的 Java Spring MVC 框架的 IDE,还可以显示你做错了什么。
创建新项目并在 pom.xml 文件中使用 hibernate-core 4.0.1.Final 版本依赖项并使用 4.2.8.RELEASE 自己的版本,spring-core 和 spring-orm 依赖项。
-
从 ProductDaoImpl.java 类中删除 import org.hibernate.Query.query; 包并放入 import org.hibernate.Query 包。
谢谢你:)
【讨论】:
【参考方案2】:ProductDao 不是 bean..这就是原因。存储库、控制器、服务都是 bean 类型。确定这是哪种豆子.....谢谢。
【讨论】:
以上是关于创建名为“homeController”的 bean 时出错:自动装配依赖项的注入失败的主要内容,如果未能解决你的问题,请参考以下文章
Angularjs:错误:[ng:areq] 参数“HomeController”不是函数,未定义
csharp 展出-GroupDocs.Search-UI-UserInterfaceExample - 控制器 - HomeController的-HomeController.cs
方法 App\Http\Controllers\HomeController::home 不存在。 [Laravel 8]