java循环引用讲解_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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值