[英]Implementation method not being called from Rest Controller using Spring
我正在尝试从控制器类中调用实现方法。 我已经用@Component注释了该接口,并在控制器中将该接口自动连线。 但是,它抛出了404异常。
在另一种方法上,我创建了一个简单的DAO,并使用@Component进行了注释,这是在我的控制器上进行的。
我的问题是,我想通过调用接口方法来执行该方法,而该方法又将调用DAO。
这是我的流程。
@RestController
public class PurchaseController {
/*@Autowired
private DpDAO dpDAO;*/ ----> This is working
@Autowired
private PurchaseService purchaseService; --> This is not working
@GetMapping("/purchase/{partyId}/{dealId}")
public String createPurchase(@PathVariable("partyId") String partyId, @PathVariable("transactionId") String transactionId) {
return purchaseService.createPurchase(partyId, transactionId); --> This is not working
//return dpDAO.createPurchase(partyId, transactionId); --> This is working
}
}
我的介面
@Component
public interface PurchaseService {
public String createPurchase(String partyId, String transactionId);
}
DpDAO类
@Component
public class DpDAO {
public String createPurchase(String partyId, String dealId) {
// Able to get logs here
return null;
}
}
我们不能注释接口吗? 任何想法将不胜感激。
我怀疑问题在于PurchaseService
是一个接口,而DpDAO
是一个类。 也就是说,您有后者的一个实例,但没有前者的一个实例。
如果是这样,那么Spring找不到要注入的bean。 因此,您需要某种方式来创建PurchaseService
实例以进行注入。
您可以这样创建一个实例:
@Component
class PurchaseServiceImpl implements PurchaseService
{
// Fill in
}
或者,您对其中一个初始化程序类具有工厂方法。 就像是:
@Bean
public PurchaseService createService()
{
return new PurchaseServiceImpl();
}
您的接口是一个规范。 尽管您使用@Autowired注释了Interface,但Spring真正所做的是注入您指定的实现。
因此,您要么提供接口实现作为组件
@Service
public class PurchaseServiceImpl implements PurchaseService {
}
或者您创建一个可以返回您选择的实现的bean
@Configuration
public class MyConfig {
@Bean
public PurchaseService purchaseService() {
//TODO
}
}
存在多个接口实现的情况。 在这些情况下,您将使用限定符。 例如
@Service("one")
public class PurchaseServiceIOne implements PurchaseService {
}
@Service("two")
public class PurchaseServiceTwo implements PurchaseService {
}
您使用限定符注入服务
@Autowired
@Qualifier("one")
private PurchaseService purchaseService;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.