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

我正在尝试Spring MVC,当我在控制器类中添加@Autowired时,出现以下错误:

易俊友
2023-03-14
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">

    <context:component-scan base-package="com.packt.webstore.domain" />
    <context:annotation-config></context:annotation-config>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/Webstore"></property>
        <property name="username" value="root"></property>
        <property name="password" value="password"></property>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

组织。springframework。豆。工厂未满足的依赖项异常:创建名为“productController”的bean时出错:未满足的依赖项通过字段“productRepository”表示;嵌套的异常是org。springframework。豆。工厂UnsatifiedDependencyException:创建名为“productRepositoryImpl”的bean时出错:通过方法“setDataSource”参数0表示的未满足的依赖关系;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException:没有“javax”类型的合格bean。sql。“数据源”可用:至少需要1个符合autowire候选条件的bean。依赖项批注:{}

package com.packt.webstore.domain.repository.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import com.packt.webstore.domain.Product;
import com.packt.webstore.domain.repository.ProductRepository;

@Repository
public class ProductRepositoryImpl implements ProductRepository {

    private NamedParameterJdbcTemplate jdbcTemplate;

    @Autowired
    private void setDataSource(DataSource dataSource) {
        this.jdbcTemplate=new NamedParameterJdbcTemplate(dataSource);
    }

    @Override
    public List<Product> getAllProducts() {
        Map<String, Object>params=new HashMap<String,Object>();
        List<Product>result=jdbcTemplate.query("SELECT * FROM PRODUCTS", params, new ProductMapper());
        return result;
    }

    private static final class ProductMapper implements org.springframework.jdbc.core.RowMapper<Product> {
        public Product mapRow(ResultSet rs,int rownum) throws SQLException{
            Product product=new Product();
            product.setName(rs.getString("name"));
            return product;
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <mvc:annotation-driven enable-matrix-variables="true"></mvc:annotation-driven>

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

     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" 
     p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
</beans>
package com.packt.webstore.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.packt.webstore.domain.repository.ProductRepository;

@Controller
public class ProductController {

    @Autowired
    private ProductRepository productRepository;


    @RequestMapping("/products")
    public String list(Model model) {
        model.addAttribute("products",productRepository.getAllProducts());
        return "products";
    }
}

共有2个答案

华献
2023-03-14

您需要在XML文件中定义DataSource bean,然后只能使用@Autowired annotation来配置该bean,或者您可以通过以下方式使用@Autowired annotation:

@自动连线私有名称参数jdbcTemplate jdbcTemplate;

杨甫
2023-03-14

看起来您没有在xml文件中配置数据源

尝试在xml文件中添加以下配置

<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/yourdbname" />
        <property name="username" value="root" />
        <property name="password" value="password" />
    </bean>
 类似资料:
  • 建造Gradle。应用程序部分。 项目部分。 我的文件中没有所有项目部分。这就是为什么我自己添加了这个地方。但是那些在所有项目中定义的 它必须成形。当我尝试引入google()和mavenCentral时,它给出了buildScript中已经定义的错误。当我试图只定义没有定义google()和mavenCentral;Build被配置为首选设置存储库而不是项目存储库,但存储库“maven”是由Bu

  • E/AndroidRuntime: FATAL EXCEPTION: main Process:ooper.loop, PID: 6019ooper.java:135RuntimeException:无法启动活动ComponentInfo{android.app.}:hread.mainInflateException:二进制XML文件行#25:错误inflating类hread.java:525

  • 错误:任务“:app:ProcessDebugResources”执行失败。 com.android.ide.common.Process.processException:org.gradle.Process.internal.exeception:Process“command”c:\users\mohamed sallam\appdata\local\android\sdk\build-to

  • My AccountEntityToAccount方法出现错误,返回类型Transaction是抽象类或接口。提供非抽象/非接口结果类型或工厂方法。AccountEntityToAccount(AccountEntity AccountEntity); 我怎样才能解决这个问题。我的事务类应该是抽象的,我无法更改抽象关键字

  • 问题内容: 我写了一个程序来查找文件或目录。 它正常工作时,我试图在搜索文件与目录 例如 java FileSearch abc.txt f:\xyz 但是当我尝试搜索文件从本地驱动器比计划抛出 异常 java FileSearch abc.txt f:\ 后,显示所有的搜索结果将引发NullPointerException异常。 code is : 我想知道为什么会抛出此异常以及如何解决它。 问

  • 错误为:无法获取项目:在“https://dynamodb.us-east-1.amazonaws.com”上执行“GetItem”时出错;AWS HTTP错误:客户端错误:导致响应:{"__type":"com.amazon.coral.validate#ValidationException","消息":"提供的键元素与架构不匹配"(截断...)ValidationException(客户端)