我有一个简单的组件类:
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的新功能。可能有国际奥委会的误解。
您正在使用Java配置类型Bean注册以及组件扫描类型Bean注册。
最快的解决方案是从Messenger类中删除@Component
。
您将两种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 类来获取实例。缺少了