注入点具有以下注释:@org.springframework.beans.factory.annotation.Autowired(required=true)

The injection point has the following annotations: @org.springframework.beans.factory.annotation.Autowired(required=true)

提问人:Loopinfility 提问时间:10/18/2022 更新时间:6/4/2023 访问量:4025

问:

您好,我是Spring Boot的新手,一段时间以来我收到此错误,不幸的是无法修复它。从那时起,我一直在谷歌上搜索,但仍然找不到我做错了什么。我相信服务类中存在错误。我试图删除字段注入 ( @Autowired) 并实现为构造函数注入,但效果不佳 在我的代码下面找到:

实体:

package com.devops.maven.cars_api_maven.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import javax.persistence.*;

@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@Entity
@Table(name = "CARS")
@SequenceGenerator(name="seq", initialValue=4, allocationSize=100)
public class Car {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
    private Long id;
    String manufacturer;
    String model;
    int build;

    public Car() {
    }

    public Car(Long id, String manufacturer, String model, int build) {
        this.id = id;
        this.manufacturer = manufacturer;
        this.model = model;
        this.build = build;
    }

    public Long getId() {
        return id;
    }

    public String getManufacturer() {
        return manufacturer;
    }

    public String getModel() {
        return model;
    }

    public int getBuild() {
        return build;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setManufacturer(String manufacturer) {
        this.manufacturer = manufacturer;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public void setBuild(int build) {
        this.build = build;
    }
}

package com.devops.maven.cars_api_maven.repositories;

import com.devops.maven.cars_api_maven.model.Car;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface CarsRepository extends JpaRepository<Car, Long> {
}

主要

package com.devops.maven.cars_api_maven;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;



@SpringBootApplication (
        exclude = {DataSourceAutoConfiguration.class },
        scanBasePackages={
            "com.devops.maven", "com.devop.application"}
        )

    public class CarsApplication {
        
        public static void main(String[] args) {
            SpringApplication.run(CarsApplication.class, args);
        }
}

服务等级

package com.devops.maven.cars_api_maven;

import com.devops.maven.cars_api_maven.model.Car;
import com.devops.maven.cars_api_maven.repositories.CarsRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("cars")
@Service
public class CarsController {
   @Autowired
   private CarsRepository repository;

    @GetMapping
    public List<Car> getCars() {
        return repository.findAll();
    }

    @PostMapping
    public Car addCar(@RequestBody Car car) {
        return repository.save(car);
    }

    @SuppressWarnings("deprecation")
    @GetMapping(value = "/{id}")
    public Car getCarById(@PathVariable("id") long id) {
        return repository.getOne(id);
    }

    @DeleteMapping(value = "/{id}")
    public void removeCarById(@PathVariable("id") long id) {
        repository.deleteById(id);
    }
}

错误输出:

应用程序无法启动


描述:

com.devops.maven.cars_api_maven 中的字段存储库。汽车控制器 需要 bean type 'com.devops.maven.cars_api_maven.repositories.CarsRepository' 无法找到。

进样点具有以下注释:

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

行动:

考虑定义 bean type “com.devops.maven.cars_api_maven.repositories.CarsRepository”在您的 配置。

java spring-boot maven

评论


答:

0赞 Rohit Agarwal 10/18/2022 #1

请从下面的类中删除并重新运行。它将解决问题。exclude = {DataSourceAutoConfiguration.class }

package com.devops.maven.cars_api_maven;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;


@SpringBootApplication (
        exclude = {DataSourceAutoConfiguration.class },
        scanBasePackages={
            "com.devops.maven", "com.devop.application"}
        )

    public class CarsApplication {
        
        public static void main(String[] args) {
            SpringApplication.run(CarsApplication.class, args);
        }
}

评论

0赞 Loopinfility 10/18/2022
当我删除它时,我收到以下错误描述:无法配置 DataSource:未指定“url”属性,无法配置嵌入数据源。原因:无法确定合适的驱动程序类 动作: 请考虑以下事项: 如果您想要一个嵌入式数据库(H2、HSQL 或 Derby),请将其放在类路径上。如果要从特定配置文件加载数据库设置,则可能需要激活它(当前没有处于活动状态的配置文件)。
0赞 Rohit Agarwal 10/18/2022
是的,您需要使用 H2 数据库或其他数据库。如果要创建 Repository 和 Entity 类,则需要数据库。如果您将使用 H2 数据库,则无需在 application.properties 中添加任何 JPA 属性
0赞 Loopinfility 10/18/2022
你能帮我怎么做吗?
0赞 Rohit Agarwal 10/18/2022
请在 pom.xml <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency 中添加以下依赖>
0赞 Rohit Agarwal 10/18/2022
很高兴听到它解决了您的问题:)
0赞 Avijit Nagare 6/4/2023 #2

我曾经遇到过这个问题。我没有遵循包约定,因此 spring boot 无法正确找到这些类/bean。甚至“scanBasePackages”也不起作用。

错误的包声明:

 Ex. com.example.course.dao
     services
     com.example.controller
     course.entities

正确声明:

Ex. com.example.course.dao
     com.example.course.services
     com.example.course.controller
     com.example.course.entities

我希望这可以帮助某人。