当前位置: 首页 > 面试题库 >

Java循环引用

薛博艺
2023-03-14
问题内容

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


 类似资料:
  • 问题内容: 给定一个以复杂的,循环的方式相互引用的类实例的集合:垃圾收集器是否可能无法释放这些对象? 我隐约记得过去这是JVM中的问题,但我 认为 这在几年前已解决。但是,在jhat中进行的一些调查显示,循环引用是我现在面临的内存泄漏的原因。 注意:我一直给人以JVM能够解析循环引用并从内存中释放这种“垃圾岛”的印象。 但是,我提出这个问题只是为了看看是否有人发现了任何异常。 问题答案: 循环引用

  • 我有圆形参考的问题。 我有Rest Webservices,它会将对象返回到前端,问题是当我试图返回具有多个引用的对象时,结果会得到无限的响应,从而生成 这些对象是由Hibernate代码生成自动生成的,我需要在后端有循环引用,我只需要在使用Jackson将信息发送到前端之前删除它。 控制器方法标头为: 我没有做任何明确的事情来转换为杰克逊,我是一个新手,我认为杰克逊自动解决了这个问题。

  • 使用MySQL、Java、Spring Boot和JPA 我有两个对象,用户和模块。 一个用户可以有多个模块,一个模块可以有多个用户。 模块的结构如下: 用户的结构如下: 在调用模块时,使用@JsonIgnore注释确实“起作用”,但理想情况下,我还需要调用用户及其模块。有什么建议可以支持这两种方法,而不会因循环引用而崩溃?

  • 问题内容: 我在我的代码中发现了一个问题。首先是代码: 输出为: 我以为第一个循环也会覆盖数组中的String。因此,无论如何输出都将结束。似乎它创建值的副本,而不是创建引用。我从未意识到这一点。我做错了吗?是否可以选择创建参考? //编辑:似乎每个人都知道,除了我。我来自C语言,没有对与C完全不同的术语“引用”给予足够的关注。幸运的是,这一次我只花了10分钟就弄清了这一点。 问题答案: 这个:

  • 一个实用的垃圾收集器大体上应该满足以下条件 一、消除悬空指针和内存泄露 二、不能给程序运行带来过高的额外开销,一般来说要控制在10% 三、尽量减少停顿时间,使得运行平稳 四、内存管理方面局部性尽量好 其中第一条没什么好说的,肯定要符合,至于第四条,当然也很重要,局部性做好了可以成倍提高运行速度,不过,如果都是内存操作,就算没做好速度一般也可以接受了,在老式的系统中,由于会用磁盘等外部存储扩展内存,

  • 本文向大家介绍C++中的循环引用,包括了C++中的循环引用的使用技巧和注意事项,需要的朋友参考一下 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。 我们可以看到在出main函数作用域之前两个指针指向的内存并没有释放(指针指向的对象没有调用析构函数),我门把当前的引用数打印出来为2这个没有问题,