2016-12-15 4 views
1

이전 버전의 Spring (XML 설정 사용)으로 생성 된 프로젝트를 Spring 설정 (Java config 사용)으로 마이그레이션하려고합니다. 프로젝트는 JMS 및 AMQP를 통한 통신을 위해 Spring Integration을 사용합니다. 지금까지 내가 이해, 나는 인터페이스, 즉 내가 액세스 할 수 없습니다 도서관에 배치되어, 지금 사용 즉,외부 인터페이스에서 "@MessagingGateway"annotation

<int:gateway id="someID" service-interface="MyMessageGateway" 
default-request-channel="myRequestChannel" 
default-reply-channel="myResponseChannel" 
default-reply-timeout="20000" /> 

@MessagingGateway(name="someID", defaultRequestChannel = "myRequestChannel", 
defaultReplyChannel = "myResponseChannel", defaultReplyTimeout = "20000") 
public interface MyMessageGateway{ ...... } 

내 문제로 교체해야 .

어떻게이 인터페이스를 MessagingGateway로 정의 할 수 있습니까?

미리 감사드립니다.

+0

... 당신은 여전히 ​​XML 설정을 사용할 수 있습니다, 당신은 자바 기반의 구성에 이르기까지 모든 마이그레이션 할 필요가 없습니다 : 또한

우리는이 JIRA 비슷한 사용 케이스에 대한이 . –

+0

맞습니다. 스프링 부트의 경우에는 필요하지 않습니다.하지만이 부서는 Java 기반 구성으로 전환하려고합니다. :) – NagelAufnKopp

답변

0

: 여기에 간단한 예제 즉

interface IControlBusGateway { 

    void send(String command); 
} 

@MessagingGateway(defaultRequestChannel = "controlBus") 
interface ControlBusGateway extends IControlBusGateway { 

} 

... 


@Autowired 
private IControlBusGateway controlBus; 

... 

try { 
     this.bridgeFlow2Input.send(message); 
     fail("Expected MessageDispatchingException"); 
    } 
    catch (Exception e) { 
     assertThat(e, instanceOf(MessageDeliveryException.class)); 
     assertThat(e.getCause(), instanceOf(MessageDispatchingException.class)); 
     assertThat(e.getMessage(), containsString("Dispatcher has no subscribers")); 
    } 
    this.controlBus.send("@bridge.start()"); 
    this.bridgeFlow2Input.send(message); 
    reply = this.bridgeFlow2Output.receive(5000); 
    assertNotNull(reply); 

할 수 있습니다 단지 extends 그 해당 지역의 하나의 외부 인터페이스를 제공합니다. GatewayProxyFactoryBean은 프록시 마법을 사용합니다. 당신은 아무것도 할 필요가 없습니다 https://jira.spring.io/browse/INT-4134

+0

그 트릭을 했어! 작고 단순합니다. :) 감사! – NagelAufnKopp

0

GatewayProxyFactoryBean; 난 그냥이 트릭을 테스트 한

@SpringBootApplication 
public class So41162166Application { 

    public static void main(String[] args) { 
     ConfigurableApplicationContext context = SpringApplication.run(So41162166Application.class, args); 
     context.getBean(NoAnnotationsAllowed.class).foo("foo"); 
     context.close(); 
    } 

    @Bean 
    public GatewayProxyFactoryBean gateway() { 
     GatewayProxyFactoryBean gateway = new GatewayProxyFactoryBean(NoAnnotationsAllowed.class); 
     gateway.setDefaultRequestChannel(channel()); 
     return gateway; 
    } 

    @Bean 
    public MessageChannel channel() { 
     return new DirectChannel(); 
    } 

    @ServiceActivator(inputChannel = "channel") 
    public void out(String foo) { 
     System.out.println(foo); 
    } 

    public static interface NoAnnotationsAllowed { 

     public void foo(String out); 

    } 

}