Grails : 부트 스트랩 코드가 완전히 닫힙니다.


6

내 grails 프로젝트의 Bootstrap.groovy에서 파기 된 콩을 액세스하려고합니다. 이것을 달성하는 방법에 대한 아이디어가 있습니까?

servletContext에 액세스 할 수없는 것 같습니다 ...?

15

당신은 코드의 덩어리를 사용 (부트 스트랩의 파괴 폐쇄 포함) 모든 곳에서의 ApplicationContext에 대한 참조를 얻을 수 있습니다

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

빈에 대한 참조 ctx.beanName로 쉽게 얻기.

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

} 

및 예 :

def bean = SpringUtil.getBean("beanName") 

이 건배, SIGI


2

흠, 심지어 을 예로 들자면 부트 스트랩의 파괴 블록 폐쇄를 사용합니다. 워드 프로세서에서 : 추측으로

 
    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 

, 나는 ServletContext를 이미 파괴되었다는 말을하려는 {{파괴}} 부트 스트랩의 폐쇄가 실행되고, 그 콩 있도록 액세스하려는 전에 이미 사라졌습니다. 누구든지 확인할 수 있습니까?


6

내가 '알고 여기

이 작업을 단순화 할 수 있습니다 (자바로 작성된) 작은 폴더의 유틸리티 클래스입니다 모두 늦었어요.하지만 Google에서 이걸 발견 한 이후로 ...

BootStrap 클래스는 모든 서비스와 콘트롤러 같은 것들과 마찬가지로, 이름으로 Spring 빈을 사용하지 않았다. 빈을 원한다면 이름으로 정의하면 나타납니다. 그렇지 않다면, grailsApplication을 해제하고 grailsApplication.mainContext.getBean 등으로 가십시오.