Tenga en cuenta que; el siguiente código creará un nuevo contexto de aplicación en lugar de usar el que ya está cargado.
private static final ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
También tenga en cuenta que beans.xml
deben formar parte de src/main/resources
medios en la guerra es parte de WEB_INF/classes
, en tanto que la aplicación real será cargado a través applicationContext.xml
mencionado al Web.xml
.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>META-INF/spring/applicationContext.xml</param-value>
</context-param>
Es difficult mencionar applicationContext.xml
ruta en ClassPathXmlApplicationContext
constructor. ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml")
no podrá encontrar el archivo.
Por lo tanto, es mejor utilizar el ApplicationContext existente mediante el uso de anotaciones.
@Component
public class OperatorRequestHandlerFactory {
public static ApplicationContext context;
@Autowired
public void setApplicationContext(ApplicationContext applicationContext) {
context = applicationContext;
}
}
También hay una mejor interfaz para ApplicationContexts - ApplicationContextAware. BeanFactoryAware debería funcionar, pero tendría que convertirlo en un contexto de aplicación si necesita la funcionalidad de contexto de la aplicación. – MetroidFan2002
Gracias por la sugerencia, he actualizado la respuesta. –
@Don Kirkby Usar el patrón singleton significa instanciar su clase de contenedor desde un método estático dentro de su clase de contenedor ... una vez que "instancia" manualmente un objeto ya no es administrado por Spring: ¿cómo resolvió este problema? – Antonin