Dépendances circulaires de Spring : il est déconseillé de s'appuyer sur des références circulaires et elles sont interdites par défaut

1. Qu’est-ce que la dépendance circulaire ?

La dépendance circulaire fait référence à la situation dans laquelle deux modules ou plus ont des dépendances et des appels mutuels, ce qui entraîne l'incapacité de ces modules à se compiler et à s'exécuter indépendamment.

1.1 Interdépendance

L'interdépendance est le problème d'erreur de dépendance le plus courant dans le développement. Lorsque l'interdépendance se produit, une erreur comme le montre la figure sera automatiquement signalée au démarrage : Il s'agit d'un problème rencontré au cours du processus de développement,
Insérer la description de l'image ici
et comme le montre la figure Comme indiqué ici, slDispatchingServiceImpl dépend de slStoreOutWorkServiceImpl, et slStoreOutWorkServiceImpl dépend de slDispatchingServiceImpl, ce qui conduit à un problème d'interdépendance.

1.2 Dépendance entre les trois

Cela signifie que A dépend de B, B dépend de C et C dépend de A. Par conséquent, bien qu’il n’y ait pas de problème de dépendance circulaire entre les deux, les trois dépendent en réalité l’un de l’autre.

1.3 Autonomie

Cela signifie que A dépend de A

2. Solutions

2.1 Analyse

Spring a en fait conçu un cache à trois niveaux pour résoudre le problème de dépendance circulaire. Lorsque nous appelons getBean(), Spring trouvera d'abord le bean cible dans le cache de premier niveau. S'il n'est pas trouvé, il le recherchera dans le second. -niveau cache. Il n'a pas encore été trouvé. Cela signifie que le bean cible n'a pas été instancié, donc Spring instanciera le bean cible. S'il n'y a pas de dépendance circulaire, le bean sera placé dans le cache de deuxième niveau (au début bean). Sinon, le bean sera marqué comme ayant une dépendance circulaire et attendra le prochain tour. Affectation de requête, c'est-à-dire analyser les annotations Autowired. Une fois l'affectation de l'annotation terminée, la cible est stockée dans le cache de premier niveau.

2.2 Planification

À en juger par l'image ci-dessus, il est en fait évident que l'erreur est causée par la dépendance mutuelle des deux couches de service. Ensuite, jetez un œil aux deux couches de service. À première vue, oh, c'est effectivement dépendant. À l'heure actuelle, nous pouvons modifier un
Insérer la description de l'image ici
Insérer la description de l'image ici
certain service pour résoudre le problème de l'interdépendance. Par exemple, j'ai résolu le problème de la dépendance circulaire en rétrogradeant le service vers un mappeur.

 @Resource
 private SlDispatchingMapper dispatchingMapper;

Je suppose que tu aimes

Origine blog.csdn.net/weixin_52796198/article/details/131375978
conseillé
Classement