Cómo Spring resuelve las dependencias circulares entre beans
La inicialización del objeto singleton de Spring se divide principalmente en tres pasos:
(1) createBeanInstance: creación de instancias, que en realidad llama al constructor del objeto para crear una instancia del objeto
(2) populateBean: complete los atributos. El paso principal es completar los atributos de dependencia de Bean.
(3) populateBean: complete los atributos de dependencia de Bean.
(3) inicializarBean: llama al método init en Spring xml.
De los pasos anteriores de inicialización de un solo Bean, podemos saber que las dependencias circulares ocurren principalmente en la primera y segunda parte. Es decir, dependencia circular del constructor y dependencia circular del campo.
Por lo tanto, si queremos resolver el problema de la referencia circular, también debemos comenzar con el proceso de inicialización. Para un singleton, solo hay un objeto en todo el ciclo de vida del contenedor Spring, por lo que es. Es fácil pensar que este objeto debería existir. En Cache, Spring usa un caché de tres niveles para resolver el problema de la dependencia circular singleton.