簡體   English   中英

UnsatisfiedDependencyException 試圖在 eclipse 中配置一個基本的 spring-boot 項目

[英]UnsatisfiedDependencyException trying to configure a basic spring-boot project in eclipse

I'm trying to configure in eclipse (with STS) a basic spring-boot project where I want to define a controller class and an entity class to autowired in controller, but I'm getting an exception. 我一直在嘗試修復它,但現在我沒有想法,有人可以幫助我嗎?

All works fine (I can get an entity object in my controller and the http request " http://localhost:8080/index " return my view in a correct way)... until I define a construct in the "Entidad" class我得到了例外。

這是我的代碼:

package com.example.springMVC_ejemplo;

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

@SpringBootApplication
public class SpringMvcBahiaProjectApplication {

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

}

package com.example.springMVC_ejemplo.controller;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;

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

import com.example.springMVC_ejemplo.model.Entidad;

@Controller
public class MyController {

    List<Entidad> exampleEntityList = new ArrayList<>();

    // inject via application.properties
    @Value("${index.message}")
    private String message;

    @Autowired
    private Entidad entidad;

    @PostConstruct
    private void initExampleEntityList() {
        String nombre = entidad.getNombre();
        System.out.println("Inicializando la lista de entidades de ejemplo");
    }

    @GetMapping(value= {"/","/index"})
    public String main(Model model) {
        model.addAttribute("message", message);
        return "index";
    }

}

package com.example.springMVC_ejemplo.model;

import org.springframework.stereotype.Service;

@Service
public class Entidad {

    private String nombre;
    private String atributo1;
    private String atributo2;

    private Entidad(String nombre, String atributo1, String atributo2) {
        super();
        this.nombre = nombre;
        this.atributo1 = atributo1;
        this.atributo2 = atributo2;
    }

    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getAtributo1() {
        return atributo1;
    }
    public void setAtributo1(String atributo1) {
        this.atributo1 = atributo1;
    }
    public String getAtributo2() {
        return atributo2;
    }
    public void setAtributo2(String atributo2) {
        this.atributo2 = atributo2;
    }

}

我得到的例外是:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.6.RELEASE)

2020-04-07 20:26:57.072  INFO 18236 --- [           main] c.e.s.SpringMvcBahiaProjectApplication   : Starting SpringMvcBahiaProjectApplication on DESKTOP-40IFSQT with PID 18236 (C:\Users\ignac\OneDrive\Documentos\eclipse-workspace\springMVC_BahiaProject\target\classes started by ignac in C:\Users\ignac\OneDrive\Documentos\eclipse-workspace\springMVC_BahiaProject)
2020-04-07 20:26:57.075  INFO 18236 --- [           main] c.e.s.SpringMvcBahiaProjectApplication   : No active profile set, falling back to default profiles: default
2020-04-07 20:26:57.682  INFO 18236 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2020-04-07 20:26:57.689  INFO 18236 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-04-07 20:26:57.689  INFO 18236 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.33]
2020-04-07 20:26:57.742  INFO 18236 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-04-07 20:26:57.743  INFO 18236 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 639 ms
2020-04-07 20:26:57.777  WARN 18236 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myController': Unsatisfied dependency expressed through field 'entidad'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entidad' defined in file [C:\Users\ignac\OneDrive\Documentos\eclipse-workspace\springMVC_BahiaProject\target\classes\com\example\springMVC_ejemplo\model\Entidad.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2020-04-07 20:26:57.779  INFO 18236 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2020-04-07 20:26:57.787  INFO 18236 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-04-07 20:26:57.870 ERROR 18236 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.example.springMVC_ejemplo.model.Entidad required a bean of type 'java.lang.String' that could not be found.

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


Action:

Consider defining a bean of type 'java.lang.String' in your configuration.

提前致謝!

您的Entidad不應該是@Service (您會收到異常,因為 Spring 不知道要傳遞給構造函數的字符串)

刪除注釋並且不要將其@Autowire 到您的@Controller 中。 畢竟,它是一個簡單的 model object。

  1. 從 Entidad bean class 中刪除 @Service。
  2. 向 Entidad class 添加無參數構造函數,否則 spring 容器將無法實例化 Entidad class 或刪除 @Autowire。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM