我正在使用SpringBoot并尝试创建RESTAPI,但无法解决此错误:“无法自动连线。找不到'personservice'类型的bean。“
因此,在我的项目中,我有以下结构:
▼ com.example
▼ person
▼ controller
PersonController (class)
► dao
► datasouurce
► model
▼ service
PersonService (class)
► car
CarApplication (Spring Boot runnable class)
我有一个只有“car”文件夹和carapplication的项目。class在“car”文件夹中,一切正常。现在我将person文件夹添加到项目中,并将carapplication.class上移一级,因为现在它必须同时处理“car”和“person”。但是自从这样做之后,personcontroller.class中出现了一个错误。
这是我的personservice.class:
package com.example.person.service;
import ...
public class PersonService {
private final PersonDao personDao;
public PersonService(@Qualifier("postgres") PersonDao personDao) {
this.personDao = personDao;
}
public List<Person> getAllPersons() {
return personDao.selectAllPersons();
}
public Optional<Person> getPersonById(UUID id) {
return personDao.selectPersonById(id);
}
}
这是carapplication.class:
package com.example;
import ...
@SpringBootApplication
@EnableScheduling
@EnableAdminServer
public class CarApplication {
public static void main(String[] args) {
SpringApplication.run(CarApplication.class, args);
}
}
最后但并非最不重要的一点是,这是发生错误的personcontroller.class:
package com.example.person.controller;
import ...
@RequestMapping("api/person")
@RestController
public class PersonController {
private final PersonService personService;
@Autowired
public PersonController(PersonService**personService**) {
this.personService = personService;
}
@GetMapping
public List<Person> getAllPersons() {
return personService.getAllPersons();
}
@GetMapping(path = "{id}")
public Person getPersonById(@PathVariable("id") UUID id) {
return personService.getPersonById(id)
.orElse(null);
}
}
我在personcontroller.class中将抛出错误的变量用“**”括起来。
这是application.properties中的数据源属性:
spring.datasource.url=jdbc:postgresql://localhost:5432/persondb
spring.datasource.username=postgres
spring.datasource.password=password
我曾尝试使用@componentscan来指定应该扫描哪些Map以查找bean,但没有解决这个问题。而且它应该已经扫描了正确的文件,因为carapplication.class已经被上移。如果需要更多的信息请告诉我。
更新:我已经在personservice.class上面添加了@service,它实际上删除了personcontroller.class中eventservice变量的红色下划线。但当我运行carapplication时,它仍然显示:
创建名为“eventservice”的bean时出错,该bean在文件[c:…\com\capasystems\person\service\personservice.class]中定义:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.unsatifieddependencyException:创建名为“postgres”的bean时出错,该bean在文件[c:…\com\capasystems\person\dao\persondataaccessservice.class]中定义:通过构造函数参数0表示的未满足的依赖关系;嵌套异常为org.springframework.beans.factory.beancreationexception:创建名为“flywayinitializer”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/flyway/flywayautoconfiguration$flywayconfiguration.class]中定义:调用init方法失败;嵌套异常为java.lang.illegalargumentexception:需要datasource或datasourceclassname或jdbcurl。
2条答案
按热度按时间shyt4zoc1#
你需要@service在你的person service类中排名第一
oiopk7p52#
你试过了吗
@ComponentScan
?一定要有
@Repository
以及@Service
适当的注解也要确保所有的包都在aaa.bbb.ccc.
在大多数情况下,这种设置可以解决这类问题。告诉我结果。