gpt4 book ai didi

java - NoSuchBeanDefinitionException : No qualifying bean of type

转载 作者:行者123 更新时间:2023-12-01 17:59:25 24 4
gpt4 key购买 nike

我堆栈了上述异常,并且确实没有低估它出现的原因。我使用的是spring boot并通过注释声明bean。

应用程序由此类执行:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {


@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(Application.class);
}

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

}

我的问题 bean 具有以下声明:

@Service
public class OrderSvc extends AbstractService implements DAOService {

我尝试将其放入以下 ​​bean 中:

@RestController
public class OrderController {

@Autowired
CarSvc carSvc;

@Autowired
OrderSvc orderSvc;

出现异常:Could not autowire field: biz.Services.OrderSvc biz.controllers.rest.administrator.OrderController.orderSvc; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [biz.Services.OrderSvc] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我还有CarSvcOrderSvc 位于同一包的 bean并扩展相同的类,但注入(inject)没有问题

@Service
public class CarSvc extends AbstractService implements DAOService<Car> {

您知道为什么会出现此异常吗?

最佳答案

Spring 为声明 @Transactional 的类创建代理,以便它能够向您的对象添加事务行为和拦截的调用。如果 bean 扩展了任何接口(interface),Spring 将使用 JDK Reflection API 创建动态代理,而这只能通过接口(interface)来完成。代理是一个实现相同接口(interface)的新对象。所以你的目标 bean 不是你的实现,而是一个代理。这就是您收到不合格 bean 异常的原因。

另一方面,CGLIB 可以通过子类化来创建代理。

因此,要使其正常工作,您需要将 bean 类型更改为接口(interface),或者可以使用 @EnableTransactionManagement(proxyTargetClass = true) 配置 cglib。

关于java - NoSuchBeanDefinitionException : No qualifying bean of type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42215980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com