diff --git a/spring-core/src/main/java/org/springframework/core/BridgeMethodResolver.java b/spring-core/src/main/java/org/springframework/core/BridgeMethodResolver.java index a5d6ec04586c..a3c3f2ac3283 100644 --- a/spring-core/src/main/java/org/springframework/core/BridgeMethodResolver.java +++ b/spring-core/src/main/java/org/springframework/core/BridgeMethodResolver.java @@ -196,7 +196,10 @@ private static Method searchInterfaces(Class[] interfaces, Method bridgeMetho return method; } else { - return searchInterfaces(ifc.getInterfaces(), bridgeMethod); + Method parentIfcMethod = searchInterfaces(ifc.getInterfaces(), bridgeMethod); + if (parentIfcMethod != null) { + return parentIfcMethod; + } } } return null; diff --git a/spring-core/src/test/java/org/springframework/core/BridgeMethodResolverTests.java b/spring-core/src/test/java/org/springframework/core/BridgeMethodResolverTests.java index f563c0e37e91..9e6f29a5755a 100644 --- a/spring-core/src/test/java/org/springframework/core/BridgeMethodResolverTests.java +++ b/spring-core/src/test/java/org/springframework/core/BridgeMethodResolverTests.java @@ -809,7 +809,8 @@ public static class ModifiedMessageEvent extends MessageEvent { @SuppressWarnings("unchecked") public static class MessageBroadcasterImpl extends GenericEventBroadcasterImpl - implements MessageBroadcaster { + implements Serializable, // implement more than one interface, see SPR-16288 + MessageBroadcaster { public MessageBroadcasterImpl() { super(NewMessageEvent.class);