Java 没有合格的豆子
研究Springboot,我让自己陷入了一个错误的无限虫洞。这是最后一个: 没有“ca.company.hello.A”类型的合格bean可用 然而,让我困惑的是,我确实定义了bean:Java 没有合格的豆子,java,spring,spring-boot,Java,Spring,Spring Boot,研究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(); }
@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还想从我这里得到什么
附言
如果我从Config
中删除Bean A
,相同的错误仍然存在:
@Configuration
public class Config {
@Bean
public B b() {
return new B();
}
}
我可以重现你的问题 1-将您的Helloer类移动到ca.company包内。 如果Helloer与ca.company处于同一级别,Spring类路径扫描将无法工作,您将得到如下错误: 如果@ComponentScan正在扫描springframework包,也可能发生这种情况(例如,如果您错误地将@ComponentScan放入默认包中) 你的结构应该是:
- java
- ca.company
- config
- hello
Helloer
2-通过spring类路径扫描,您可以从配置类中删除bean定义,因为您将得到一个双bean定义错误
3-删除为抑制[1]中的错误而添加的批注 我可以重现你的问题 1-将您的Helloer类移动到ca.company包内。 如果Helloer与ca.company处于同一级别,Spring类路径扫描将无法工作,您将得到如下错误: 如果@ComponentScan正在扫描springframework包,也可能发生这种情况(例如,如果您错误地将@ComponentScan放入默认包中) 你的结构应该是:
- java
- ca.company
- config
- hello
Helloer
2-通过spring类路径扫描,您可以从配置类中删除bean定义,因为您将得到一个双bean定义错误
3-删除为抑制[1]中的错误而添加的批注 尝试不使用
@Bean public A A(){return new A();}
您已经用@Component注释了类A和类B。Spring将使用类路径扫描来自动检测和配置它们。您不需要在配置类中定义bean。尝试删除it@YCF_L没有工作。@HenriqueForlani没有工作。当您运行代码时,是否在IntelliJ IDEA运行配置窗口中将活动配置文件设置为client\u app\u profile\u name
?或者您只需删除@Profile()
。并考虑基于@ Henrique Forlani回答BEOWE检查您的代码。尝试没有<代码> bean bean A]({)返回new A.();}< />代码>您已经用@组件注释了A类和B类。Spring将使用类路径扫描来自动检测和配置它们。您不需要在配置类中定义bean。尝试删除it@YCF_L没有工作。@HenriqueForlani没有工作。当您运行代码时,是否在IntelliJ IDEA运行配置窗口中将活动配置文件设置为client\u app\u profile\u name
?或者您只需删除@Profile()
。并考虑根据下面的Henrique Forlani回答检查你的代码。嗨,恩里克。正如您在第1条中所说,我将主管道移动到了ca.company
包。我从Config
中删除了bean定义,如您在2中所说。但第三是什么?哪些注释?@JeniaIvanov您排除了db自动配置以抑制[1]中的错误,对吗?这没关系,但不是问题的根本原因。我提议的改变进展如何?嗨,亨里克。正如您在第1条中所说,我将主管道移动到了ca.company
包。我从Config
中删除了bean定义,如您在2中所说。但第三是什么?哪些注释?@JeniaIvanov您排除了db自动配置以抑制[1]中的错误,对吗?这没关系,但不是问题的根本原因。我提议的改革进展如何?