2010-01-08 10 views

Respuesta

28

Si necesita una referencia al BeanFactory, utilice BeanFactoryAware. Si necesita una referencia al ApplicationContext, utilice ApplicationContextAware.

Tenga en cuenta que la interfaz ApplicationContext es una subclase de BeanFactory y proporciona métodos adicionales sobre la interfaz básica BeanFactory.

Si todo lo que necesita hacer es llamar al getBean(), entonces BeanFactory es suficiente.

Tenga en cuenta también que Spring 2.5+ proporciona una forma más agradable de conectarse con un BeanFactory o ApplicationContext, p. Ej.

private @Autowired ApplicationContext appContext; 
private @Autowired BeanFactory beanFactory; 

No hay necesidad de los XyzAware interfaces.

+0

En caso de autocableado, ¿es posible capturar el evento setContext/beanFactory? En el constructor appContext/beanFactory aún no se ha establecido ... – ksimon

2

¿Necesita acceso a las funciones adicionales disponibles en ApplicationContext? Si es así, entonces por supuesto debe usar ApplicationContextAware. De lo contrario, BeanFactoryAware será suficiente.

Entre muchas otras cosas, un ApplicationContext tiene métodos adicionales para inspeccionar los beans, p. containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForType, getBeansOfType que pueden ser útiles para usted y los que no están disponibles en BeanFactory

lo general implemento ApplicationContextAware

4

Un ApplicationContext es una versión extendida de BeanFactory y por lo tanto ofrece funcionalidades adicionales.

Entonces si usar ApplicationContextAware o BeanFactoryAware se reduce a la pregunta: ¿Usted explícitamente necesita alguna de las funcionalidades adicionales de ApplicationContext? Si implementas el ApplicationContextAware, de lo contrario mantente en BeanFactoryAware.

Cuestiones relacionadas