From 49dc960ab233813b14b8f388404e3560a7df1e0d Mon Sep 17 00:00:00 2001 From: Greg Turnquist Date: Fri, 31 May 2013 11:16:31 -0400 Subject: [PATCH] Add alternate constructor to MessageListenerAdapter As a convenience when configuring with Java, added another constructor call that allows setting the delegate and the default listener method in one line of code. ```java public MessageListenerAdapter(Object delegate, String defaultListenerMethod) { this(delegate); setDefaultListenerMethod(defaultListenerMethod); } ``` This supports configuring a POJO-based listener with a single step: ```java @Test public void testCustomMethodWithAlternateConstructor() throws Exception { MessageListenerAdapter adapter = new MessageListenerAdapter(target, "customMethod"); adapter.afterPropertiesSet(); adapter.onMessage(STRING_MSG, null); verify(target).customMethod(PAYLOAD); } ``` A pure Java configuration bean can now look like this: ```java @Bean MessageListenerAdapter listenerAdapter(Receiver receiver) { return new new MessageListenerAdapter(receiver, "pojoMethod"); } @Bean Receiver receiver() { return new Receiver(); } ``` No longer do we have to A) assign the adapter to a variable and B) call setDefaultListenerMethod, slimming down pure POJO configuration with pure Java. --- .../adapter/MessageListenerAdapter.java | 14 +++++++++++ .../listener/adapter/MessageListenerTest.java | 24 +++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java b/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java index 55d8385e0..041a1eff1 100644 --- a/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java +++ b/src/main/java/org/springframework/data/redis/listener/adapter/MessageListenerAdapter.java @@ -105,6 +105,7 @@ import org.springframework.util.StringUtils; * * @author Juergen Hoeller * @author Costin Leau + * @author Greg Turnquist * @see org.springframework.jms.listener.adapter.MessageListenerAdapter */ public class MessageListenerAdapter implements InitializingBean, MessageListener { @@ -206,6 +207,19 @@ public class MessageListenerAdapter implements InitializingBean, MessageListener initDefaultStrategies(); setDelegate(delegate); } + + /** + * Create a new {@link MessageListenerAdapter} for the given delegate. + * + * @param delegate the delegate object + * @param defaultListenerMethod method to call when a message comes + * + * @see #getListenerMethodName + */ + public MessageListenerAdapter(Object delegate, String defaultListenerMethod) { + this(delegate); + setDefaultListenerMethod(defaultListenerMethod); + } /** * Set a target object to delegate message listening to. Specified listener diff --git a/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java b/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java index 2b0d96918..19ef0cb76 100644 --- a/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java +++ b/src/test/java/org/springframework/data/redis/listener/adapter/MessageListenerTest.java @@ -27,17 +27,17 @@ import org.mockito.MockitoAnnotations; import org.springframework.data.redis.connection.DefaultMessage; import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; -import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * Unit test for MessageListenerAdapter. * * @author Costin Leau + * @author Greg Turnquist */ public class MessageListenerTest { - private static final RedisSerializer serializer = new StringRedisSerializer(); + private static final StringRedisSerializer serializer = new StringRedisSerializer(); private static final String CHANNEL = "some::test:"; private static final byte[] RAW_CHANNEL = serializer.serialize(CHANNEL); private static final String PAYLOAD = "do re mi"; @@ -107,6 +107,16 @@ public class MessageListenerTest { verify(target).customMethod(PAYLOAD); } + @Test + public void testCustomMethodWithAlternateConstructor() throws Exception { + MessageListenerAdapter adapter = new MessageListenerAdapter(target, "customMethod"); + adapter.afterPropertiesSet(); + + adapter.onMessage(STRING_MSG, null); + + verify(target).customMethod(PAYLOAD); + } + @Test public void testCustomMethodWithChannel() throws Exception { MessageListenerAdapter adapter = new MessageListenerAdapter(target); @@ -118,6 +128,16 @@ public class MessageListenerTest { verify(target).customMethodWithChannel(PAYLOAD, CHANNEL); } + @Test + public void testCustomMethodWithChannelAndAlternateConstructor() throws Exception { + MessageListenerAdapter adapter = new MessageListenerAdapter(target, "customMethodWithChannel"); + adapter.afterPropertiesSet(); + + adapter.onMessage(STRING_MSG, RAW_CHANNEL); + + verify(target).customMethodWithChannel(PAYLOAD, CHANNEL); + } + /** * @see DATAREDIS-92 */