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

[SpringBoot]:简单组件无法自动连接字符串类

澹台阳秋
2023-03-14

我有一个简单的组件类:

package jason;

import org.springframework.stereotype.Component;

@Component
public class Messenger {
    private String message;


    public Messenger(String message) {
        this.message = message;
    }

    public void setMessage(String message){
        this.message  = message;
    }

    public void getMessage(){
        System.out.println("Your Message : " + message);
    }
}

在构造函数的参数中,IntelliJ报告:无法自动连线。未找到“String”类型的bean

这个小玩具项目还有两个类:Config

package jason;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackageClasses = Messenger.class)
public class Config {
    @Bean
    public Messenger helloWorld(){
        return new Messenger("Hello World!");
    }
}

MainApp

package jason;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        Messenger obj = context.getBean("helloWorld", Messenger.class);
        obj.getMessage();
    }
}

奇怪的是,除了表面上的编译时错误外,项目还生成了,但在运行时失败了,原因是:

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'messenger' defined in file [C:\Users\jasonfil\code\green-taxi\target\classes\jason\Messenger.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: {}

我做错了什么?SpringBoot的新功能。可能有国际奥委会的误解。


共有2个答案

郝永思
2023-03-14

您正在使用Java配置类型Bean注册以及组件扫描类型Bean注册。

最快的解决方案是从Messenger类中删除@Component

翟缪文
2023-03-14

您将两种bean注入方式与Messenger类混合,基于注释的注入方式与@Component混合,并且您将它声明为bean,在配置类中使用@Bean

当您尝试使用带有激活组件扫描的注释配置应用程序上下文注入Messenger时,Spring将首先使用基于注释的注入,因此@component

所以Spring将调用默认构造函数来注入您的bean,当然,如果没有基于构造函数的自动连接(这是您的情况),所以您需要将默认构造函数添加到Messenger构造函数,所以会得到上面的错误。当然,您需要删除@Bean配置,因为您没有使用它:包jason;

import org.springframework.stereotype.Component;

@Component
public class Messenger {

    private String message;

    public Messenger() {
    }

    public Messenger(String message) {
        this.message = message;
    }

    public void setMessage(String message){
        this.message  = message;
    }

    public void getMessage(){
        System.out.println("Your Message : " + message);
    }
}

或者,如果要使用bean配置,可以从Messenger中删除@ComponentScan,也可以删除@ComponentScan

package jason;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {
    @Bean
    public Messenger helloWorld(){
        return new Messenger("Hello World!");
    }
}

 类似资料:
  • 我在创建带有参数的@Bean时遇到问题,这运行得很好,但在intelliJ中,它给出的错误无法自动连线。找不到“String”类型的bean。 我要做什么?我正在尝试创建具有原型作用域的bean,在IntelliJ“无法自动连线。未找到‘String’类型的bean”中出现此错误有谁能帮我解决这个问题吗 这是原型测试的类

  • Sds (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 sds。 本章将对 sds 的实现、性能和功能等方面进行介绍, 并说明 Redis 使用 sds 而不是传统 C 字符串的原因。 sds 的用途 Sds 在 Redis 中的主要作用有以下两个: 实现字符串对象(StringObject); 在 Re

  • 本文向大家介绍java String[]字符串数组自动排序的简单实现,包括了java String[]字符串数组自动排序的简单实现的使用技巧和注意事项,需要的朋友参考一下 如下所示: 打印结果:(数字、大写、小写,安装ACS码值进行排序) 以上这篇java String[]字符串数组自动排序的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我正在使用java配置而不是XML迁移到spring Security4.0.1。当我自动操作时,它会给出以下错误: HTTP状态500-org.springframework.beans.factory.beanCreationException:创建名为“ScopedTarget.UsersComponent”的bean时出错:注入autowired依赖项失败;嵌套异常为org.springf

  • 我的类使用@service,而bean已经自动连线,所以我不明白为什么会出现这个错误。

  • 我有一个应用类 我有控制器课 并且,我想为Application test编写一个测试用例,以确保创建的实例类型为HelloController 但是,我在自动连接 hello控制器变量时遇到错误(找不到 hello 控制器类型的 bean)。根据我的理解,@SpringBootTest应该创建上下文并返回一个实例。我们不需要编写任何上下文 xml 或使用任何注释Config 类来获取实例。缺少了