2013-05-30 4 views
1

디자인 프로토 타입과 디버깅을 위해 기존 Java 응용 프로그램에 GroovyConsole을 임베드하고 싶습니다.임베디드 Groovy Console - 전체 상태를 공유하는 방법

저는이 콘솔이 내 전체 프로그램에 액세스 할 수있게 해주고 싶습니다. 대부분이 싱글 톤이나 팩토리는 실제 객체를 반환해야하며, GroovyConsole의 세계를 위해서만 새 객체를 만들어야한다는 것을 의미합니다.

이렇게하는 방법이 있습니까? 또는 setVariable() 호출을 사용하여 하나씩 모든 개체를 수동으로 전달해야합니까?

+0

[여기] (http://groovy.codehaus.org/Embedding+a+Groovy+Console+in+a+Java+Server+Application)에서 유용한 정보를 얻을 수 있습니다. – dmahapatro

+0

만약 내가 절대적으로 완벽한 봄을 사용했다면. 정말 가깝지만, 스프링을 사용하지 않기 때문에 저는 바인딩 할 수있는 애플리케이션 컨텍스트가 없습니다. –

답변

2

이것은 실제로 매우 쉽습니다. 대부분의 경우, 인수가없는 생성자를 사용하여 새 콘솔을 만들면 원하는 방식대로 작동합니다. 이 새로운 그루비 콘솔을 생성하고 사용자가 원하는 어떤 클래스 로더를 사용하도록 말할 것이다

def cl = ... //which ClassLoader you'll need depends on your application 
def console = new Console(cl) 
console.run() 

: 응용 프로그램이 여러 개의 클래스 로더를 사용하는 경우에는 콘솔 인스턴스를 만들 때, 당신이 원하는 것을 전달합니다. 이것은 바인딩이나 변수를 설정하지 않지만 콘솔이 사용하는 클래스가 응용 프로그램의 나머지 클래스와 정확히 동일하다는 것을 보장합니다. 애플리케이션의 클래스 로더와 관련하여 특별한 작업을 수행하지 않으면 새로운 Console()을 호출하면 현재 클래스 로더를 부모로 사용하게됩니다.

+0

마지막 문장이 옳지 않은 듯합니다. 매개 변수가없는 새 콘솔을 시작했고 명시 적으로 공유하지 않고 나머지 앱에서 개체에 액세스 할 수 없었지만 다시 시도해 보겠습니다. 나머지는 정확하다고 생각하고 클래스 로더를 전달하면 작동합니다. –

+0

그래, 그냥 확인해. getClass(). getClassLoader()를 전달하면 원하는 클래스를 얻을 수 있습니다. 필요하지 않으면 자신의 클래스 로더를 만들어야합니다. 도와 주셔서 감사합니다! –

관련 문제