GRAILS : 부트 스트랩 코드의 로토리 폐쇄에서 스프링 콩에 액세스 하시겠습니까?
-
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가 이미 파괴되었다고 말해야합니다. 누구든지 확인할 수 있습니까?
제휴하지 않습니다 StackOverflow