Inicialización de primavera
Basado en Spring 4.1.6
Línea 29 super(parent); Crear una instancia de la clase principal, AbstractXmlApplicationContext, AbstractRefreshableConfigApplicationContext, AbstractRefreshableApplicationContext, AbstractApplicationContext
Línea 32 actualizar ( );
Línea 4
prepareRefresh();
// Dile a la subclase que actualice el BeanFactory interno.
Línea 38
FinishRefresh();
Línea 7 ConfigurableListableBeanFactory beanFactory = getFreshBeanFactory()
Línea 2 refrescoBeanFactory(); Antes de crear una instancia de AbstractRefreshableApplicationContext, este método se implementó en las subclases AbstractRefreshableApplicationContext y GenericApplicationContext.
Línea 13
DefaultListableBeanFactory beanFactory = createBeanFactory();
Línea 10
XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory ); p>
Línea 31, loadBeanDefinitions(resources);
Porque la interfaz BeanDefinitionReader tiene muchas clases de implementación y XmlBeanDefinitionReader es solo una de las subclases, como se define en el paso 4.
Línea 5, documentReader.registerBeanDefinitions(doc, createReaderContext(resource));
Línea 23, parseBeanDefinitions(root, this.delegate)
Línea 24); , parseBeanDefinitions(root, this.delegate);
Línea 25, documentReader.delegate);
Línea 13, en el análisis básico de elementos con nombre de Spring (importación, bean, beans, alias) :
parseDefaultElement(ele, delegado);
Análisis de elementos extendidos: delegado.parseCustomElement(ele); Los elementos extendidos están relacionados con aop, discutiremos un poco más adelante.
El siguiente es un ejemplo de análisis de beans.
Lo anterior completa la lectura, el análisis y el registro, y luego ingresa 2, AbstractApplicationContext FinishBeanFactoryInitialization(beanFactory);
Luego. continúe Suplemento,
Al crear una instancia de DefaultListableBeanFactory, llame a preInstantiateSingletons para completar la creación de instancias de beans, no de beans abstractos, beans singleton o carga diferida.
El método refresco() llama a FinishBeanFactoryInitialization(beanFactory);
La línea 10, método getBean, apunta a 21 o 22, que debería apuntar a 21, DefaultListableBeanFactory.
Línea 41, objeto singletonInstance = getSingleton(beanName); getSingletonObject debe colocarse en el paso 18. ¿Es inútil el paso 17? Quizás se use internamente.
recorrido de getBean
objeto público getBean(nombre de cadena) lanza BeansException {
return doGetBean(nombre, nulo, nulo, falso); p> }
getBean --gt; doGetBean --gt; createBean --gt; doCreateBean --gt; createBeanInstance --gt; , mbd, args);
Línea 31, objeto beanInstance = doCreateBean(beanName, mbd, args);
Línea 22, instanciaWrapper = createBeanInstance(beanName, mbd, args);
Última línea, instantiateBean(beanName, mbd)
Línea 14, beanInstance = getInstantiationStrategy ().instantiate(mbd, beanName, parent); Ejecutado, encapsulado por BeanWrapper.
Línea 9, devuelve getInstantiationStrategy().instantiate(mbd, beanName, parent);
Línea 31, devuelve BeanUtils.instantiateClass(constructorToUse
protected); Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[] args)
set mbd .postProcessed = true
Si no hay ningún Bean singleton en el caché, necesita; Cree un Bean singleton desde cero. Aquí sobrecargamos principalmente el método getSingleton() para cargar el Bean singleton.
Incluye métodos antes y después, a saber, beforeSingletonCreation(beanName); y afterSingletonCreation(beanName);