springbootapplication scan enableautoconfiguration component application java spring naming-conventions

scan - spring boot java configuration



¿Qué es "Consciente"? ¿Cuándo debo incluir en mi nombre de clase? (4)

A veces, encuentro algunos nombres de clase, incluyendo Aware como ApplicationContextAware y MessageSourceAware (spring). ¿Tiene este Aware algún significado especial o es una regla famosa?


Agregar adjetivos como "consciente" al final es un esquema de denominación que se usa a menudo para las interfaces Java. Esto puede ser implementado por clases, y el resultado es un código que es más fluido de leer para los seres humanos, como

class Broker implements ApplicationContextAware { /* ... */ }

donde es bastante fácil ver que esta clase es un intermediario para algo, y sabe cómo manejar los contextos de aplicación. Además de eso, el sufijo "Consciente" no tiene un significado especial desde la perspectiva de Java (compilador).


El concepto de interfaces conscientes:

Si quiero la referencia de objetos de clases de primavera como XmlBeanFactory , ApplicationContext ... En 2 o más clases, entonces hay 3 formas posibles.

  1. Creando 2 BeanFactories en dos clases.
  2. creando en una clase y compartiendo con todas las clases requeridas.

En el primer caso, estamos creando innecesariamente 2 BeanFactories. En el segundo caso, las clases están estrechamente unidas entre sí.

  1. Si nuestra clase implementa la interfaz BeanFactoryAware y anula el método contractual llamado public BeanFactory setBeanFactory(BeanFactory factory) , IOC container ve esa interfaz especial y llama setBeanFactory método BeanFactory estableciendo la referencia de BeanFactory .

En el 3. caso anterior no hay dos problemas.


Esas no son clases, son interfaces. El nombre es solo una convención en Spring, lo que significa que se va a inyectar algún objeto de marco especial a esa clase si es administrado por el marco.

Directamente desde los documentos de ApplicationContextAware :

La interfaz debe ser implementada por cualquier objeto que desee ser notificado del ApplicationContext en el que se ejecuta.

En este caso, el bean que implementa esta interfaz obtendrá una referencia al ApplicationContext que administra la aplicación.


Las interfaces que usted cita parecen ser una convención específica de Spring para permitir que los objetos interactúen con el contenedor de inyección de dependencia que los creó. Al implementar la interfaz, una clase señala que desea cierta información del contenedor y al mismo tiempo proporciona un método para pasar esa información.

Lo vería simplemente como un intento de encontrar un nombre genérico para una interfaz que ofrezca dicha funcionalidad, no necesariamente una convención sólida con un significado técnico específico.