Red de conocimiento informático - Material del sitio web - Cómo ver el código fuente de Spring

Cómo ver el código fuente de Spring

1. Preparación: después de descargar el código fuente de Spring del sitio web oficial, impórtelo a Eclipse para facilitar la consulta.

2. Abra el proyecto que utilizamos Spring, busque el archivo de configuración del sistema del sitio web Web.xml y busque la información de inicialización de Spring en él:

lt listenergt;

lt;listener-classgt;org.springframework.web.context.ContextLoaderListenerlt;/listener-classgt;

lt;/listenergt;

Como se puede observar en la configuración información, comenzamos La entrada es el oyente ContextLoaderListener.

En el código fuente encontramos esta clase, su definición es:

clase pública ContextLoaderListener extiende ContextLoader

implementa ServletContextListener {

/**

* Inicializa el contexto de la aplicación web raíz.

*/

public void contextInitialized(evento ServletContextEvent) {

this.contextLoader = createContextLoader();

if (this.contextLoader == null) {

this.contextLoader = esto;

}

this.contextLoader.initWebApplicationContext(event.getServletContext());

}

...

}

Esta clase continúa ContextLoader e implementa el oyente. La configuración de carga de información y la inicialización sobre Spring comienzan desde aquí. Lea y escriba un artículo para obtener más información al respecto.

2. Acerca del COI y AOP

Acerca del COI de Spring Hay muchos artículos relacionados en Internet que puedes leer. Entonces, ¿qué puntos de conocimiento aprendemos de ellos?

1) El contenedor IOC y la inyección de dependencia de aspectos AOP son el núcleo de Spring.

El contenedor IOC proporciona conveniencia y servicios básicos para que los desarrolladores administren dependencias entre objetos, entre los cuales Bean Factory (BeanFactory) y Context (ApplicationContext) son las manifestaciones de IOC. BeanFactory es una clase de interfaz que solo proporciona definiciones para los servicios más básicos proporcionados por el contenedor, mientras que DefaultListTableBeanFactory, XmlBeanFactory, ApplicationContext, etc. son implementaciones específicas.

Interfaz:

interfaz pública BeanFactory {

//Esta es la definición de escape del bean de fábrica, porque si usa el nombre del bean para recuperar en el contenedor IOC, obtendrá El objeto es un objeto generado por el bean de fábrica.

//Si necesita obtener el bean de fábrica en sí, debe usar el nombre con escape para recuperarlo del IOC contenedor

String FACTORY_BEAN_PREFIX = "amp;";

// Aquí, según el nombre del bean, la instancia del bean se obtiene en el contenedor IOC. una gran fábrica abstracta, el usuario puede obtener el bean requerido según el nombre

/ /En Spring, la diferencia entre Bean y los objetos JAVA ordinarios es:

//Bean ya contiene. El procesamiento de dependencias en nuestra información de definición de Bean, y el Bean se ha colocado en el contenedor IOC Administrado, tiene su propio ciclo de vida

El objeto getBean(String name) lanza BeansException;

// Aquí, la instancia de bean se obtiene en función del nombre del bean y el tipo de clase, y lo anterior. El método es diferente porque generará una excepción si el tipo de clase de la instancia de bean obtenida por el nombre de la raíz es diferente de el requerido.

El objeto getBean(nombre de cadena, tipo requerido de clase) lanza BeansException;

//Aquí se proporciona la recuperación de beans para ver si hay un bean con este nombre en el contenedor IOC

boolean containsBean(String name);

//Aquí obtenemos la instancia del bean según el nombre del bean y determinamos si el bean es un singleton. Durante la configuración, el bean predeterminado se configura como. un formulario singleton, si no se requiere el formulario de una sola pieza, el usuario debe marcarlo en la información de definición del Bean, de modo que cada vez que el contenedor IOC reciba la solicitud getBean del usuario, generará un nuevo Bean y lo devolverá. el cliente para su uso: este es el formulario Prototipo

boolean isSingleton(String name) throws NoSuchBeanDefinitionException;

//Aquí obtenemos el tipo de clase de la instancia del bean

La clase getType(String name) lanza NoSuchBeanDefinitionException;

// p>

// Obtenga el alias del bean aquí. Si busca según el alias, también se recuperará su nombre original.

String[] getAliases(String name);

}

Implementación:

La implementación de XmlBeanFactory es la siguiente:

clase pública XmlBeanFactory extiende DefaultListableBeanFactory {

//Esto se define para el contenedor. Un lector de definición de bean utilizado de forma predeterminada. En el uso de Spring, la lectura de la información de definición de bean es parte de. inicialización del contenedor, pero en la implementación se separa del registro del contenedor y la inyección de dependencias, por lo que se puede utilizar de manera flexible.

Lector XmlBeanDefinitionReader final privado = new XmlBeanDefinitionReader(this);

// Aquí se requiere una información de definición de Bean del tipo de recurso. El proceso de posicionamiento real se completa mediante el proceso de construcción del recurso. .

public XmlBeanFactory(recurso de recurso) lanza BeansException {

this(resource, null);

}

//En la inicialización función Utilice un lector para leer recursos y obtener información de definición de beans. Esto completa todo el proceso de carga y registro del contenedor IOC de la información de definición de Bean

public XmlBeanFactory(recurso de recursos, BeanFactory parentBeanFactory) lanza

BeansException {

super( parentBeanFactory );

this.reader.loadBeanDefinitions(recurso);

}