Question

Je suis à la recherche d'accéder à un haricot dans ma détruire la fermeture dans le Bootstrap.groovy de mon projet Grails. Toutes les idées sur la façon d'y parvenir?

Il me semble avoir pas accès à ServletContext ...?

Était-ce utile?

La solution

Vous pouvez obtenir une référence à la applicationContext de partout (y compris la fermeture de détruire BootStrap) en utilisant ce morceau de code:

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

Obtenir une référence à un haricot est aussi facile que ctx.beanName.

Voici une petite classe util (écrit en Java) qui peut simplifier cette tâche:

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);
    }

}

et un exemple:

def bean = SpringUtil.getBean("beanName")

Cheers, Sigi

Autres conseils

Je sais que je suis tout retard ici et tout, mais depuis que je trouve cela via Google ...

Votre classe BootStrap obtient injecté avec des haricots Spring par nom, comme tous les services et les contrôleurs et d'autres choses. Si vous voulez un haricot, juste def par son nom et il va apparaître. Sinon, def grailsApplication et aller à grailsApplication.mainContext.getBean etc.

Hmm, je ne trouve aucun exemple de quelqu'un, même avec la fermeture de bloc détruire Bootstrap. De la documentation:

    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 

En tant que supposition, je dois dire que le ServletContext a déjà été détruite avant la {{}} détruire la fermeture de Bootstrap est exécutée, de sorte que bean tentez d'accéder est déjà parti. Quelqu'un peut-il confirmer?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top