GRAILS : 부트 스트랩 코드의 로토리 폐쇄에서 스프링 콩에 액세스 하시겠습니까?

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

  •  05-09-2019
  •  | 
  •  

문제

나는 grails 프로젝트의 bootstrap.groovy에서 내 파괴 폐쇄에서 콩에 접근하려고합니다. 이것을 달성하는 방법에 대한 아이디어가 있습니까?

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

도움이 되었습니까?

해결책

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

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

콩에 대한 참조를 얻는 것은 ctx.beanName.

다음은이 작업을 단순화 할 수있는 작은 util 클래스 (Java로 작성)입니다.

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")

건배,시기

다른 팁

나는 내가 여기서 늦었고 모든 것이 지루하지만 Google을 통해 이것을 찾은 이후 ...

부트 스트랩 클래스에는 모든 서비스 및 컨트롤러 및 물건과 마찬가지로 이름으로 스프링 콩이 주입됩니다. 당신이 콩을 원한다면, 단지 이름으로 def it을 표시하면 나타납니다. 그렇지 않으면 GrailsApplication def grailsapplication.MainContext.getBean 등으로 이동하십시오.

흠, 난 누구의 사례도 찾을 수 없습니다. 사용 부트 스트랩의 파괴 블록 폐쇄. 문서에서 :

    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 

추측으로, 나는 부트 스트랩의 {{destroy}}}}}이 이미 사라지도록 ServletContext가 이미 파괴되었다고 말해야합니다. 누구든지 확인할 수 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top