Genericize PubSubChannelRegistry

Without generics, extending AbstractPubSubChannelRegistry and using
a custom Message type requires some unpleasant casting and suppression
of warnings. By genericizing PubSubChannelRegistry and
AbstractPubSubChannelRegistry these problems can be avoided.
This commit is contained in:
Andy Wilkinson
2013-06-17 17:05:39 +01:00
committed by Rossen Stoyanchev
parent 426875b4f6
commit 7bb3b824c3
3 changed files with 21 additions and 20 deletions

View File

@@ -25,12 +25,12 @@ import org.springframework.messaging.SubscribableChannel;
* @author Rossen Stoyanchev
* @since 4.0
*/
public interface PubSubChannelRegistry {
public interface PubSubChannelRegistry<M extends Message<?>, H extends MessageHandler<M>> {
SubscribableChannel<Message<?>, MessageHandler<Message<?>>> getClientInputChannel();
SubscribableChannel<M, H> getClientInputChannel();
SubscribableChannel<Message<?>, MessageHandler<Message<?>>> getClientOutputChannel();
SubscribableChannel<M, H> getClientOutputChannel();
SubscribableChannel<Message<?>, MessageHandler<Message<?>>> getMessageBrokerChannel();
SubscribableChannel<M, H> getMessageBrokerChannel();
}

View File

@@ -28,39 +28,39 @@ import org.springframework.web.messaging.PubSubChannelRegistry;
* @author Rossen Stoyanchev
* @since 4.0
*/
public class AbstractPubSubChannelRegistry implements PubSubChannelRegistry, InitializingBean {
public class AbstractPubSubChannelRegistry<M extends Message<?>, H extends MessageHandler<M>> implements PubSubChannelRegistry<M, H>, InitializingBean {
private SubscribableChannel<Message<?>, MessageHandler<Message<?>>> clientInputChannel;
private SubscribableChannel<M, H> clientInputChannel;
private SubscribableChannel<Message<?>, MessageHandler<Message<?>>> clientOutputChannel;
private SubscribableChannel<M, H> clientOutputChannel;
private SubscribableChannel<Message<?>, MessageHandler<Message<?>>> messageBrokerChannel;
private SubscribableChannel<M, H> messageBrokerChannel;
public void setClientInputChannel(SubscribableChannel<Message<?>, MessageHandler<Message<?>>> channel) {
@Override
public SubscribableChannel<M, H> getClientInputChannel() {
return this.clientInputChannel;
}
public void setClientInputChannel(SubscribableChannel<M, H> channel) {
this.clientInputChannel = channel;
}
@Override
public SubscribableChannel<Message<?>, MessageHandler<Message<?>>> getClientInputChannel() {
return this.clientInputChannel;
}
@Override
public SubscribableChannel<Message<?>, MessageHandler<Message<?>>> getClientOutputChannel() {
public SubscribableChannel<M, H> getClientOutputChannel() {
return this.clientOutputChannel;
}
public void setClientOutputChannel(SubscribableChannel<Message<?>, MessageHandler<Message<?>>> channel) {
public void setClientOutputChannel(SubscribableChannel<M, H> channel) {
this.clientOutputChannel = channel;
}
@Override
public SubscribableChannel<Message<?>, MessageHandler<Message<?>>> getMessageBrokerChannel() {
public SubscribableChannel<M, H> getMessageBrokerChannel() {
return this.messageBrokerChannel;
}
public void setMessageBrokerChannel(SubscribableChannel<Message<?>, MessageHandler<Message<?>>> channel) {
public void setMessageBrokerChannel(SubscribableChannel<M, H> channel) {
this.messageBrokerChannel = channel;
}

View File

@@ -16,6 +16,8 @@
package org.springframework.web.messaging.support;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHandler;
import org.springframework.util.Assert;
import reactor.core.Reactor;
@@ -25,8 +27,7 @@ import reactor.core.Reactor;
* @author Rossen Stoyanchev
* @since 4.0
*/
public class ReactorPubSubChannelRegistry extends AbstractPubSubChannelRegistry {
public class ReactorPubSubChannelRegistry extends AbstractPubSubChannelRegistry<Message<?>, MessageHandler<Message<?>>> {
public ReactorPubSubChannelRegistry(Reactor reactor) {