Red de conocimiento informático - Problemas con los teléfonos móviles - El proceso de creación de Bean en Spring

El proceso de creación de Bean en Spring

El paquete de beans proporciona funciones básicas para administrar y operar beans mediante programación, mientras que el paquete de contexto agrega ApplicationContext, que mejora la funcionalidad de BeanFactory de una manera más orientada al marco.

El contexto. paquete La base es la interfaz ApplicationContext ubicada en el paquete ntext. Se deriva de la interfaz BeanFactory y proporciona todas las funciones de BeanFactory. Para funcionar de una manera más orientada al marco, el paquete contextual utiliza relaciones de herencia y capas. El paquete de contexto también proporciona lo siguiente. Funciones

a Acceso a MessageSource a mensajes IN

b Acceso a recursos como URL y archivos

c Los eventos se pasan a beans que absorber la interfaz ApplicationListener

d Cargar múltiples contextos (heredados) para que cada contexto se centre en una capa específica, como la capa web de la aplicación

Soporte de internacionalización

ApplicationContext extiende la interfaz MessageSource y, por lo tanto, proporciona funciones de mensajería (IN o internacionalización). Cuando se usa junto con NestingMessageSource, también puede procesar información jerárquica. Estas son las interfaces básicas proporcionadas por Spring para procesar información. /p>

Cuando se carga un ApplicationContext, buscará automáticamente el bean MessageSource definido en el contexto. Este bean debe entregarse al messageSource. Si se encuentra dicho bean, se delegarán todas las llamadas a los métodos anteriores. al origen del mensaje encontrado. Si no se encuentra ningún origen de mensaje, ApplicationContext intentará encontrar si su padre contiene un bean con el mismo nombre. Si es así, utilizará el bean encontrado como origen de mensaje. creará un StaticMessageSource.

Spring actualmente proporciona dos implementaciones de MessageSource:

ResourceBundleMessageSource y StaticMessageSource. Ambos implementan NestingMessageSource y pueden manejar mensajes anidados. una forma programática de agregar información a la fuente. A menudo usamos ResourceBundleMessageSource

Uso de recursos en Spring

ApplicationContext hereda la interfaz ResourceLoader y define el método getResource() en esta interfaz de la siguiente manera

Recurso getResource(Ubicación de la cadena)

Este método devuelve un identificador de recurso. Este identificador siempre debe ser un descriptor de recurso reutilizable que permita múltiples llamadas a getInputStream(); El parámetro del método getResource() es una dirección de acceso a recursos. Por ejemplo

p>

 file:\c:/test data

 classpath:test data (busque el archivo dat de prueba). desde la ruta de clase y devolver su identificador de recurso)

WEB INF/ test dat

Tenga en cuenta que el identificador de recurso devuelto por el método getResource() no significa que el recurso realmente exista. Necesitas ajustarte

Utilice el método existe() de la interfaz de Recursos para determinar si el recurso existe

El recurso proporciona funciones independientes del protocolo

Entrega de eventos

El procesamiento de tiempo en el ApplicationContext se proporciona a través de la clase AppcationEvent y la interfaz ApplicationListener. Si se implementa un bean que implementa la interfaz ApplicationListener en el contexto, cada vez que se publique un ApplicationEvent en ApplicationContext, se notificará al bean la función de mentira real. el patrón de diseño estándar de Observer

Tres eventos estándar proporcionados por Spring

un ContextRefreshedEvent

Un evento enviado cuando ApplicationContext se ha inicializado o actualizado aquí La inicialización significa que. todos los beans están cargados, los singleton tienen instancias previas y ApplicationContext está listo

b ContextClosedEvent

El evento enviado cuando finaliza el contexto utilizando el método close() de ApplicationContext. que el singleton se destruye

c RequestHandledEvent

Un evento relacionado con la web que informa a todos los beans que se ha respondido a una solicitud HTTP (esta vez se enviará después de que se complete una solicitud). ) Tenga en cuenta que este tiempo solo se aplica al uso de la aplicación web DispatcherServlet de Spring

=============================== ============== ===================================== ============

Ciclo de vida

Método InitializingBean/init

Implementación de la fábrica de beans Springframework La interfaz InitializingBean permite que un bean funcione trabajo de inicialización después de que BeanFactory establezca todas sus propiedades requeridas

p>

Por supuesto, puede usar el método init en lugar de implementar esta interfaz para evitar que la aplicación se combine con Spring ***

Si un bean implementa InitializingBean y especifica el método init, Spring llamará primero El método InitializingBean llama al método especificado por el método init

Método desechableBean/destroy

Implementación la interfaz desechableBean de la fábrica de beans springframework permite que un bean reciba una devolución de llamada cuando se destruye el BeanFactory que lo contiene. Tenga en cuenta que la gestión de beans de BeanFactory es de instancia única de forma predeterminada. Si el bean no es una instancia única, Spring no puede. administrar su ciclo de vida

BeanFactoryAware

Para aquellos que han implementado la clase de interfaz Springframework beans factory BeanFactoryAware Cuando sea creada por BeanFactory, tendrá una referencia a la BeanFactory que la creó

BeanNameAware

Si un bean implementa el bea springframework

ns factory BeanNameAware y se implementa en BeanFactory, luego BeanFactory llamará al bean a través de esta interfaz para notificar al bean su ID implementado. Esta devolución de llamada se produce después de la configuración de la propiedad del bean normal y antes de la devolución de llamada de inicialización, como el método afterProperteis. de InitializingBean (o un método de inicio personalizado)

El ciclo de vida de Bean es el siguiente

Construcción de Bean

Llame al método setXXX() para establecer las propiedades del Bean

Llamar a setBeanName() de BeanNameAware

Llamar al método setBeanFactory() de BeanFactoryAware

Llamar al método postProcessBeforeInitialization() de BeanPostProcessor

Llamar a afterPropertiesSet() del método InitializingBean

Llamar al método de inicialización personalizado

Llamar al método postProcessAfterInitialization() de la clase BeanPostProcessor

Llamar a destroy() método de DesechableBean

Llame al método de destrucción personalizado

============================= ============ ======================================== ============ =

Extensión del marco IoC de Spring

Los componentes IoC del marco Spring están diseñados para ser extensibles. Por lo general, los desarrolladores de aplicaciones no lo necesitan. para subclasificar las clases de implementación de cada BeanFactory o ApplicationContext insertando el contenedor IoC de Spring que implementa interfaces de acceso específicas que se pueden expandir sin restricciones

BeanPostProcessor: se llama después de crear el bean

BeanFactoryPostProcessors se llama antes se crea el bean

Si desea realizar alguna lógica personalizada antes o después de que el contenedor Spring complete la creación de instancias de un bean, puede insertar una o más instancias de BeanPostProcessor

El springframewonfig La interfaz BeanPostProcessor contiene dos métodos de devolución de llamada. Cuando una clase se registra como posprocesador para un contenedor, se llama al posprocesador antes y después de cualquier método de inicialización (como afterProperties y métodos declarados mediante el método init) para cada instancia de bean creada por. del contenedor. Se obtendrá un postprocesador de devolución de llamada del contenedor y podrá realizar cualquier acción deseada en esta instancia de bean, incluso ignorar completamente la devolución de llamada

BeanFactory y ApplicationContext tratan a los postprocesadores de bean de manera ligeramente diferente

p>

ApplicationContext detectará automáticamente cualquier beans que se le proporcionen y que implementen la interfaz BeanPostProcessor definida en los metadatos de configuración y los registrará como posprocesadores y luego lo llamará cuando el contenedor cree el bean para implementar un posprocesador. No hay diferencia entre implementar otros beans y no se requieren otras acciones. Por otro lado, cuando se usa BeanFactory, el postprocesador del bean escribe código para registrarse explícitamente.

El siguiente punto de extensión que vemos es sí.

springframewonfig BeanFactoryPostProcessor Hay una diferencia importante. El significado de esta interfaz es similar al de BeanPostProcessor. BeanFactoryPostProcessor actúa sobre la definición de beans (como proporcionar metadatos de configuración fáciles). permite implementar fácilmente BeanFactoryPostProcessor. Leer los metadatos de configuración y posiblemente modificarlos antes de crear una instancia de cualquier bean.

Spring incluye una serie de postprocesadores de fábrica de beans existentes, como PropertyResourceConfigure y PropertyPlaceHolderConfigure, así como BeanNameAutoProxyCreator

<. p> En un La aplicación de BeanFactoryPostProcessor en BeanFactory requiere codificación manual, pero ApplicationContext detectará los beans implementados en él que implementan la interfaz BeanFactoryPostProcessor y los usará automáticamente como postprocesadores de trabajo de beans cuando sea apropiado. Implemente un postprocesador e implemente otros. diferencia entre los beans y no se requieren otras acciones

PropertyPlaceholderConfigurer

Como implementación de postprocesador de Bean Factory, se puede utilizar para colocar algunos valores de propiedad en BeanFactory. definición en otro archivo de formato de propiedades Java independiente, que permite a los usuarios personalizar algunas propiedades clave (como el nombre de usuario y la contraseña de la URL de la base de datos) al implementar la aplicación sin tener que realizar modificaciones complejas y peligrosas en el archivo de definición XML principal o en los archivos utilizados por el contenedor

PropertyOverrideConfigurer

Similar a PropertyPlaceholderConfigurer, pero en comparación con este último, el primero puede no tener ningún interés o ningún valor para las propiedades del bean si el archivo de propiedades sobrescrito no tiene el. contenido de una determinada propiedad del bean, entonces se utilizará la definición de contexto

La definición de la fábrica de beans no se anula, por lo que con solo echar un vistazo al archivo de definición XML no se hace evidente de inmediato si se anula. la configuración está vigente cuando varios PropertyOverrideConfigurer definen una propiedad de bean. Cuando se especifican diferentes valores, el último ganará

***Utiliza beanName nombre de propiedad para especificar el valor y no es necesario configurarlo. en el bean

Registrar editores de propiedades definidos por el usuario

p>

 a Al configurar las propiedades del bean con valores de cadena, BeanFactory esencialmente usa el editor de propiedades JavaBeans estándar para convertir estas cadenas en tipos complejos de propiedades. Spring registra previamente muchos editores de propiedades personalizados (como representar una cadena. Mi nombre de clase se convierte en matrices de objetos de clase)

b Para escribir un editor de propiedades que pueda implementar la interfaz PropertyEditor, una forma más sencilla es heredar de la clase PropertyEditorSupport

Para usar PropertyEditors personalizados debe usar springframewonfig CustomEditorConfigurer para registrar un editor de propiedades personalizado

FactoryBean se puede usar como proxy

springframework beans factory FactoryBean

**Para obtener el FactoryBean en sí, debe agregar & delante del beanName, es decir, &beanName

*********La diferencia entre BeanFactory y ApplicationContext***** *****

ApplicationContext crea todos los beans y los almacena en el caché cuando se inicializa ApplicationContext lishixinzhi/Article/program/Java/ky/201311/28565