서비스 요청을 백그라운드 프로세스로 실행하는 플러그인이 있습니다. 즉, 사용자 동작과 직접 관련이없는 타이머 동작을 수행합니다.플러그인 서비스 호출 후크
이 서비스 호출이 완료 될 때마다 "기본"응용 프로그램에서 일부 코드를 실행해야합니다. 해당 플러그인 코드에 연결하는 방법이 있습니까? 플러그인 코드에 액세스 할 수 있으므로 변경하는 것이 큰 장애물은 아닙니다.
서비스 요청을 백그라운드 프로세스로 실행하는 플러그인이 있습니다. 즉, 사용자 동작과 직접 관련이없는 타이머 동작을 수행합니다.플러그인 서비스 호출 후크
이 서비스 호출이 완료 될 때마다 "기본"응용 프로그램에서 일부 코드를 실행해야합니다. 해당 플러그인 코드에 연결하는 방법이 있습니까? 플러그인 코드에 액세스 할 수 있으므로 변경하는 것이 큰 장애물은 아닙니다.
플러그인 서비스가 완료되면 이벤트를 게시하고 기본 애플리케이션에서 해당 이벤트를 수신하도록 설정할 수 있습니다. 이 패턴을 몇 번 사용했고 여러 가지 응용 프로그램을 디커플링하는 데 매우 편리했습니다. 이렇게하려면 event 클래스를 만드십시오. 플러그인 서비스가 ApplicationContextAware
을 구현
class PluginEvent extends ApplicationEvent {
public PluginEvent(source) {
super(source)
}
}
그런 다음 있습니다.
는class ApplicationService implements ApplicationListener<PluginEvent> {
void onApplicationEvent(PluginEvent event) {
//whatever you want to do in your app when
// the plugin service fires.
}
}
이 청취자는 필요하지 않습니다 즉 플러그인 이벤트가 게시 될 때 응답 리스너 서비스를 생성하여 이벤트 기본 응용 프로그램에서 다음
class PluginService implements ApplicationContextAware {
def applicationContext
def serviceMethod() {
//do stuff
publishPluginEvent()
}
private void publishPluginEvent() {
def event = new PluginEvent(this)
applicationContext.publishEvent(event)
}
}
를 게시 할 수있는 방법을 제공합니다 Grails 서비스라면, POJO/POGO 만 사용할 수 있지만,
resources.groovy
안에 스프링 빈으로 설정해야합니다.
저는 최근에이 방법을 사용해 왔으며 잘 작동 해 왔습니다. 그것은 Grails 도구 상자에있는 좋은 도구입니다.
서비스가 어떻게 든 인스턴스화되어야합니까? –
Grails 서비스가 아닐 경우. 다른 Grails 서비스/Spring 빈처럼 초기화 될 것입니다. – proflux
그게 내가 가정 한 것이지만, Bootstrap.groovy에서 applicationService를 인스턴스화하지 않으면 모든 귀뚜라미입니다. 그런 다음 살아납니다. –