Grails: Acceso a los granos de la primavera en el cierre Destory del código de arranque?

StackOverflow https://stackoverflow.com/questions/574807

  •  05-09-2019
  •  | 
  •  

Pregunta

Estoy buscando para acceder a un bean en mi cierre de destruir en el Bootstrap.groovy de mi proyecto griales. Cualquier ideas sobre cómo lograr esto?

Me parece que no tienen acceso a ServletContext ...?

¿Fue útil?

Solución

Puede obtener una referencia a la applicationContext de todas partes (incluyendo el cierre de destruir BootStrap) usando ese trozo de código:

def ctx = org.codehaus.groovy.grails.web.context.ServletContextHolder.servletContext.getAttribute(org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes.APPLICATION_CONTEXT);

Obtener una referencia a un bean es tan fácil como ctx.beanName.

Aquí está una pequeña clase util (escrito en Java) que puede simplificar esta tarea:

import org.springframework.context.ApplicationContext;
import org.codehaus.groovy.grails.web.context.ServletContextHolder;
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes;

public class SpringUtil {

    public static ApplicationContext getCtx() {
        return getApplicationContext();
    }

    public static ApplicationContext getApplicationContext() {
        return (ApplicationContext) ServletContextHolder.getServletContext().getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT);
    }

    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName) {
        return (T) getApplicationContext().getBean(beanName);
    }

}

y un ejemplo:

def bean = SpringUtil.getBean("beanName")

Saludos, Sigi

Otros consejos

Sé que soy todo tarde aquí y todos, pero desde que me encontré por Google ...

Su clase BootStrap se inyecta con granos de primavera por su nombre, al igual que todos los servicios y controladores y esas cosas. Si quieres un frijol, simplemente def por su nombre y que va a aparecer. De lo contrario, simplemente def grailsApplication e ir a grailsApplication.mainContext.getBean etc.

Hmm, no puedo encontrar ningún ejemplo de que alguien incluso usando el cierre bloque de destruir en Bootstrap. A partir de los documentos:

    It is not guaranteed that {{destroy}} will be called unless the 
application exits gracefully (for example by using the application 
server's shutdown command) so don't rely on it too much 

Como una suposición, que tendría que decir que el ServletContext ya ha sido destruida antes del {{destruir}} se ejecuta el cierre de Bootstrap, por lo que el frijol que está tratando de acceso se ha ido ya. Alguien puede confirmar?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top