我试图从我的控制器类调用实现方法。我在@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;
}
}
我们不能注释接口吗?任何想法将不胜感激。
答案 0 :(得分:1)
我怀疑问题是void readInv(ArrayBag &ArrayBag1, ArrayBag &ArrayBag2) {
//ArrayBag1 and ArrayBag2 are objects of class ArrayBag
std::string inVal;
//value to hold each line in file
std::ifstream readFile;
readFile.open("setInventory.txt"); //"setInventory.txt" is the txt file being read from.
if (readFile.is_open()) {
std::cout << "File is being read." << std::endl;
while(!readFile.eof()) {
getline(readFile, inVal);
for(int i = 0; i < inVal.size(); i++) {
std::cout << inVal[i] << std::endl;
ArrayBag1.add(inVal[i] - '0');
//ArrayBag1.add() is the public member function used to add the
//passing value to the private member array.
}
}
}
}
是一个接口,而PurchaseService
是一个类。也就是说,你有一个后者的实例,但不是前者的实例。
如果那是真的,那么Spring找不到要注入的bean。因此,您需要一些方法来创建要注入的DpDAO
实例。
您可以创建一个实例:
PurchaseService
或者您在其中一个初始化类上有工厂方法。类似的东西:
@Component
class PurchaseServiceImpl implements PurchaseService
{
// Fill in
}
答案 1 :(得分:0)
您的界面是一个规范。虽然您使用@Autowired接口注释了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;