Java循环引用
作者:互联网
在正在进行的项目中,人们编写了服务类来访问DAO.
几乎每个业务对象都具有使用自己的DAO的自己的服务.
在某些服务上,我们使用对其他服务的引用.
目前,人们正在实例化构造函数中所需的服务.
但是现在,我遇到了麻烦,因为服务A需要服务B而服务B需要服务A,因此对任一构造函数的调用都会导致堆栈溢出…
示例(伪代码):
//Constructor of OrderService
public OrderService() {
orderDAO = DAOFactory.getDAOFactory().getOrderDAO();
itemService = new ItemService();
}
//Constructor of ItemService
public ItemService() {
itemDAO = DAOFactory.getDAOFactory().getItemDAO();
orderService = new OrderService();
}
您将如何解决?使用单例模式?
谢谢
解决方法:
Spring框架通过使用依赖注入解决了这个问题.简而言之,它的作用是实例化所有DAO,然后在实例化之后但在主要业务逻辑之前设置dao依赖关系.
如果您必须手动执行此操作,请参考以下示例:
/*
OrderService
*/
public OrderService ()
{
orderDAO = DAOFactory.getDAOFactory().getOrderDAO();
}
public setItemService (ItemService service)
{
itemService = service;
}
/*
ItemService
*/
public ItemService ()
{
itemDAO = DAOFactory.getDAOFactory().getItemDAO();
}
public setOrderService (OrderService service)
{
orderService = service;
}
/*
Bring it together in some other class
*/
...
// instantiate singletons
orderService = new OrderService ();
itemService = new ItemService ();
// inject dependencies
orderService.setItemService (itemService);
itemService.setOrderService (orderService);
标签:circular-reference,java,constructor,stack-overflow 来源: https://codeday.me/bug/20191011/1890494.html