ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java循环引用

2019-10-11 06:01:27  阅读:215  来源: 互联网

标签:circular-reference java constructor stack-overflow


在正在进行的项目中,人们编写了服务类来访问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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有