java - 没有合格的 bean
问题描述
研究 Springboot,我让自己陷入了一个无限的错误虫洞。这是最后一个:没有可用的 'ca.company.hello.A' 类型的合格 bean
然而,令我困惑的是我确实定义了 bean:
@Configuration
public class Config {
@Bean
public B b() {
return new B();
}
@Bean
public A a() {
return new A();
}
}
并像这样使用它:
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile("client_app_profile_name")
@SpringBootApplication
public class Helloer {
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Helloer.class, args);
A a = ctx.getBean(A.class);
a.speak();
}
}
这是我的文件结构:
这是A类,以防万一:
@Component
public class A {
@Autowired
private B b;
@Value("Covid 19")
private String calamity;
public void speak() {
b.writeToScreen(this.calamity);
}
}
有人可以给我提示一下 Springboot 还想从我这里得到什么吗?;)
附言
如果我删除Bean A
from Config
,同样的错误仍然存在:
@Configuration
public class Config {
@Bean
public B b() {
return new B();
}
}
解决方案
我可以重现你的问题。
1 - 将您的 Helloer 类移动到 ca.company 包内。如果 Helloer 与 ca.company 处于同一级别,则 Spring 类路径扫描将不起作用,您将收到如下错误:
如果您正在 @ComponentScanning 一个 springframework 包,也会发生这种情况(例如,如果您错误地将 @ComponentScan 放入默认包中)
你的结构应该是:
- java
- ca.company
- config
- hello
Helloer
2 - 在 spring 类路径扫描工作的情况下,您可以从配置类中删除 bean 定义,因为您将收到双重 bean 定义错误。
3 - 删除您添加的注释以抑制 [1] 中的错误。
推荐阅读
- python - Seaborn 导入错误
- node.js - 调用回调的 Lambda 调用错误:指标显示没有错误
- mysql - 如何使用 mysql 作为 jupyterhub 的数据库?
- python - 在python中使用列表理解获取列表的所有可能排列?
- wordpress - 删除过滤器项目 isotop Jupiter 主题
- java - 从终端运行 jar 时启动哪个 tomcat 服务
- php - 无法在 phpmailer 中发送空复选框值
- spring-boot - 无法写入 JSON:没有为类 net.i2p.crypto.eddsa.math.ed25519.Ed25519LittleEndianEncoding 找到序列化程序
- javascript - 如何将 react-tippy 中的 html 道具中的组件连接到 redux 表单
- sql - 在 SQL Server 中替换字符串中的有趣字符