我正在尝试做一些似乎很简单的事情。但我怎么也不能让它工作。我一定错过了什么。
我有两个Spring Boot(3.0.5)项目:
- 一个库叫做spring-lib 另一个是使用lib的web应用程序。
在我的lib中,我在包com.example.springlib.configuration
中有这个配置类:
@Configuration
@ConfigurationProperties(prefix = "com.example.hello")
public class HelloConfiguration {
private String text;
@Bean
public HelloService helloService() {
return new HelloService(text);
}
}
我在com.example.springlib.service
中有这个服务:
@RequiredArgsConstructor
public class HelloService {
private final String hello;
public String hello(String name) {
return String.format(hello, name);
}
}
在META-INF/spring.factories
文件中,我有这个:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.springlib.configuration.HelloConfiguration
现在在我的web应用程序中,我有这个控制器在com.example.springweb.web
:
@RestController
@RequiredArgsConstructor
public class HelloController {
private final HelloService helloService;
@GetMapping("/hello/{name}")
public HelloResponse convert(@PathVariable String name) {
var response = new HelloResponse();
response.setMessage(helloService.hello(name));
return response;
}
}
这个application.yml
文件:
com:
example:
hello:
text: Hello %s!
所以这里没有什么太复杂的。我正等着服务返回"你好,鲍勃!"如果我调用/hello/Bob
但是我无法启动web应用程序。由于某种原因,无法找到HelloService
。我得到这个错误信息:
Description:
Parameter 0 of constructor in com.example.springweb.web.HelloController required a bean of type 'com.example.springlib.service.HelloService' that could not be found.
我错过了什么?我做错了什么?
在Spring Boot 3中,META-INF/spring.factories
不再支持注册自动配置。
你需要在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中注册你的自动配置类
这个文件应该列出你的配置类,每行一个类名。例如:
com.example.springlib.configuration.HelloConfiguration
com.example.springlib.configuration.SomeOtherConfiguration
顺便说一下,从Spring Boot 2.7开始,建议使用@AutoConfiguration而不是@Configuration,特别是当你想以期望的顺序应用多个自动配置时。
您可以在官方文档中阅读更多相关内容:创建您自己的自动配置
你可以直接删除
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.springlib.configuration.HelloConfiguration
如果仍然不行就添加
@EnableAutoConfiguration
在你的主类
之上