
[英]NoSuchBeanDefinitionException: No qualifying bean of type '<package>' available: expected at least 1 bean which qualifies as autowire candidate
[英]No qualifying bean of type available: expected at least 1 bean which qualifies as autowire candidate
我正在学习 Spring 依赖注入,为此我编写了一些简单的代码,但我经常遇到这个错误:
No qualifying bean of type available available: expected at least 1 bean which qualifies as autowire candidate.
谁能指出我正确的方向? 谢谢!
服务.java
package net.ddns.encante.test2.Spring.SpringTest2;
import org.springframework.stereotype.Component;
@Component
public class Service {
void doService (){
System.out.println("Service is running");
}
}
Controller.java
package net.ddns.encante.test2.Spring.SpringTest2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Controller {
@Autowired
Service service;
void doControl(){
System.out.println("Controlling, move along");
}
void doServiceByController(){
service.doService();
}
}
SpringTest2Application.java
package net.ddns.encante.test2.Spring.SpringTest2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@SpringBootApplication
public class SpringTest2Application {
public static void main(String[] args) {
SpringApplication.run(SpringTest2Application.class, args);
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(Controller.class);
ctx.refresh();
Controller ctrl = ctx.getBean(Controller.class);
ctrl.doServiceByController();
}
}
我尝试了 @Component 和 @Autowired 注释的不同组合,但没有帮助。
问题是你的代码。
SpringApplication.run(SpringTest2Application.class, args);
这已经创建了您需要的一切。 但是,您将其丢弃并尝试在其中塞进一些东西。
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(Controller.class);
ctx.refresh();
Controller ctrl = ctx.getBean(Controller.class);
ctrl.doServiceByController();
这将创建另一个应用程序上下文,并且仅针对Controller
没有别的。
相反,如果您阅读run
方法的 javadoc,您会发现它已经返回了一个ApplicationContext
。 您首先应该使用哪个。
ApplicationContext ctx = SpringApplication.run(SpringTest2Application.class, args);
Controller ctrl = ctx.getBean(Controller.class);
ctrl.doServiceByController();
是你所需要的全部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.