繁体   English   中英

没有可用类型的合格 bean:预计至少有 1 个 bean 有资格作为自动装配候选者

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM