我已经阅读了许多有关Spring框架中DI原理的文章,但是在以下情况下,我仍然不了解如何解决循环依赖:
实体类
class Thread {
...
String status;
}
class Reply {
Thread thread;
String status;
...
}
服务层来处理这两个对象的CRUD
class ThreadService {
@Autowired private ReplyService replySvc;
public void suspend (Thread t) {
t.setStatus("suspended");
replySvc.getReplies(t).forEach(r -> {
r.setStatus("suspended");
replySvc.update(r);});
dao.save(t);
}
public void update(Thread t) {
...
dao.save(t);
}
...
}
class ReplyService {
@Autowired private ThreadService threadSvc;
public Reply create(...) {
thread.setStatus("replied");
threadSvc.update(thread);
...
return reply;
}
public List<Reply> getReplies(Thread t) {
...
return replies;
}
public void update(Reply r) {
...
dao.save(r);
}
}
两个服务都涉及另一个服务的更新调用,以更新相应的实体。 如果我想应用DI原理,应该怎么改变?
答案 0 :(得分:0)
根据您的设计,最危险的依赖项是
ThreadService (应该隔离)-> ReplyService 。
您可以使用基于事件的设计来分离组件:
ThreadService
ReplyService应该是事件ThreadSuspendedEvent的侦听器,并且在接收到该事件时,应执行以下代码:
getReplies(t).forEach(r -> {
r.setStatus("suspended");
update(r);});