manantial de resolver circular idea referencias

proceso de desarrollo, B, similar al caso de A-> B-> A existe a menudo; ver el DefaultSingletonBeanRegistry fuente primavera

getSingleton (String beanName, allowEarlyReference boolean) 方法:
/ **
	 * Hoja de Ruta de primavera referencias circulares: referencias autorizados a realizar objeto singleton Actualmente creado de antemano,
	 * Las propiedades del avance de inyección Singleton referencia de objeto no se ha completado, es posible resolver el problema de las referencias circulares
	 * Retorno del (crudo) objeto singleton registrada bajo el nombre dado.
	 * <P> Los cheques ya instanciados únicos y también permite una temprana
	 * Referencia a un producto único que está creando (resolución de una referencia circular).
	 * Los cheques han creado instancias de objeto único y permite referencias para avanzar se está creando actualmente la implementación de un solo caso (para resolver referencias circulares).
	 * @Param beanName el nombre del grano para tener en cuenta
	 * @Param allowEarlyReference si los primeros referencias se deben crear o no
	 * @Return el objeto singleton registrado, o {} @code nula si no localizados
	 * /
	@Nullable
	Objeto protegido getSingleton (String beanName, allowEarlyReference boolean) {
		// iniciar caché Singleton de encontrar, no hemos encontrado la primera será determinar si se está creando el frijol
		// objeto singleton determina si el correspondiente isSingletonCurrentlyInCreation en la creación
		Objeto singletonObject = esto. singletonObjects .get (beanName);
		si (singletonObject == null && isSingletonCurrentlyInCreation (beanName)) {
			sincronizadas (this.singletonObjects) {
				// earlySingletonObjects ahorro todos los casos individuales de la exposición temprana, tratan mirando desde earlySingletonObjects
				singletonObject = esto. earlySingletonObjects .get (beanName);
				si (singletonObject == null && allowEarlyReference) {
					// Si se permite que la dependencia a tiempo, puede tratar de encontrar el modo de realización correspondiente a la planta de singletonFactories
					ObjectFactory <?> = SingletonFactory esto. singletonFactories .get (beanName);
					si (singletonFactory! = null) {
						// Crear frijol de soja, la exposición temprana y la memoria caché de frijol, atributo aún no se inyecta, se utiliza para resolver dependencias circulares
						singletonObject = singletonFactory.getObject ();
						this.earlySingletonObjects.put (beanName, singletonObject);
						this.singletonFactories.remove (beanName);
					}
				}
			}
		}
		volver singletonObject;
	}

  

Descripción:

  

	/ ** caché de objetos Singleton: Nombre del grano a la instancia del bean. * /
	/ * * Caché Singleton frijol /
	final privado Map <String, Object> singletonObjects = new ConcurrentHashMap <> (256);

	/ ** Caché de fábricas simples: nombre del bean a ObjectFactory. * /
	/ * ** Las fábricas sola cache /
	final privado Map <String, ObjectFactory <>> singletonFactories = new HashMap <> (16);

	/ ** caché de objetos Singleton principios: Nombre del grano a la instancia del bean. * /
	/ * Cache bean singleton exposición temprana es decir inyecta propiedad de bean no se ha completado * /
	privados finales mapa <String, Object> earlySingletonObjects = new HashMap <> (16);

	/ ** Conjunto de embarazos únicos registrados, que contienen los nombres de frijol en orden de inscripción. * /
	Conjunto final privado <String> registeredSingletons = new LinkedHashSet <> (256);

 

interfaz () método getObject ObjectFactory:

pública interfaz ObjectFactory <T> {

	/ **
	 * Este método devuelve una instancia del bean de gestión de la planta de haba
	 * Devolver una instancia (posiblemente compartido o independiente)
	 * Del objeto gestionado por esta fábrica.
	 * @Return la instancia resultante
	 * @Throws BeansException en caso de errores de creación
	 * /
	T getObject () lanza BeansException;

}

  

  

 

 

Recycling Solutions referencias:

    1 usando anotación @Autowired, tiempo de inyección determinado por el resorte de atributo de objeto, una referencia al objeto A se expone, cuando el objeto B requiere la inyección;

    método de inyección 2 setter basado en el atributo B

Supongo que te gusta

Origin www.cnblogs.com/wl20200316/p/12516384.html
Recomendado
Clasificación