Spring Boot依赖注入

5

我是Spring的新手,最近几天一直在学习。现在我正在尝试使用它做些事情。似乎在Spring Boot中,一切都已经改变了。 没有applicationContext文件,我应该使用@Bean。好吧,在教程中这段代码可以工作,但是对于我来说却失败了。我错过了什么?

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

控制器:

@RestController
public class GreetingController {

private final Test test;

@Autowired
public GreetingController(Test test){
    this.test = test;
}

@RequestMapping("/greeting")
  public String greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
    return "greeting" + test.getTest();
  }
}


class Test {

  public String getTest() {
    return "tetst";
  }
}

错误:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [hello.Test] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741)
... 18 more

我假设Bean必须被定义...但在教程中没有Bean的定义...或者我没看到它。

ApplicationGreetingController在哪个包中?@SpringBootApplication扫描控制器和组件,但它们必须在同一个包或更低级别的包中。 - spencergibb
2个回答

9

Test类未被识别为Spring组件。因此,您不能在GreetingController中注入它。为了在该控制器中注入Test对象,请使用像@Component注释(或其他指示您的类可以自动扫描的注释)对Test类进行注释。


3

错过了完整的错误信息。你需要在Test上加上@Component


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接