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
=============================== ============== ===================================== ============ p>
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ó p>
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 accionesPropertyPlaceholderConfigurer
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