【问题标题】:Consider defining a bean of type 'java.lang.String' in your configuration考虑在你的配置中定义一个“java.lang.String”类型的bean
【发布时间】:2019-05-10 02:59:13
【问题描述】:

运行 Spring Boot 应用程序

说明:

Car 中构造函数的参数 0 需要一个无法找到的“java.lang.String”类型的 bean

    @Component
public class Car implements Driver {

    private String name;
    private int color;

    @Autowired
    public Car(String name, int color) {
        this.name = name;
        this.color = color;

    }

    @Override
    public void close() {

    }
}

【问题讨论】:

  • 您要求 Spring 提供汽车的主机、端口和 caFile。它应该在哪里以及如何找到它们?这个类可能不应该是一个 Spring bean。顺便说一句,汽车不是司机,所以设计看起来不对。
  • @JBNizet 与此无关
  • 点击“字符串名称”,查看消息:无法自动装配。未找到“字符串”类型的 bean。 less... (Ctrl+F1) 检查信息:检查 bean 类中的自动装配问题。
  • 另外,点击“int color”,查看消息:无法自动装配。没有找到 'int' 类型的 bean。 less... (Ctrl+F1) 检查信息:检查 bean 类中的自动装配问题。
  • 如果你比我们更了解,你为什么要问?它确实与它有关。您要求 Spring 将 String 和 int 注入您的 Car bean。它不可能猜到它应该注入什么。这就是错误告诉您的内容:“Car 中构造函数的参数 0 需要一个找不到的 'java.lang.String' 类型的 bean”。

标签: spring spring-boot


【解决方案1】:

我也遇到过类似的问题。我用 getter 和 setter 替换了构造函数来分配值。成功了。。

【讨论】:

    【解决方案2】:

    如果你想将 Car 对象作为组件注入,那么你应该提供它的参数,如 String name 和 int Color,然后你可以按照以下步骤添加一些配置管理器:

    1. 删除@Component 和@Autowired 注释。

    2. 需要创建一个配置管理器类上显示的bean作为配置。

      @Configuration
      public class ConfigurationManager {
      
           @Bean
           public Car car() {
              return new Car("Default", 1);
          } 
      } 
      

    【讨论】:

    • 我想在其他地方使用这个组件并在那里设置它:例如:“Autowired”的主类
    • 是的,如果你使用这个例子作为bean,那么你可以在spring上下文中的任何类上调用它,所以调用它@Autowired它会工作
    • 没问题,xD,只要有必要就很好:P
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 2020-08-01
    • 2019-02-14
    • 2018-12-21
    • 2019-09-04
    • 2020-05-23
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多