diff --git a/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ServiceBean.java b/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ServiceBean.java index 3aaf65f166e9dddd2c102685d1eb566f1ac511aa..d797a970b9e7254baabfd65aaeab165f7ccb76a1 100644 --- a/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ServiceBean.java +++ b/dubbo-config/src/main/java/com/alibaba/dubbo/config/spring/ServiceBean.java @@ -27,6 +27,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.context.support.AbstractApplicationContext; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.MonitorConfig; @@ -66,7 +67,18 @@ public class ServiceBean extends ServiceConfig implements InitializingBean Method method = applicationContext.getClass().getMethod("addApplicationListener", new Class[]{ApplicationListener.class}); // 兼容Spring2.0.1 method.invoke(applicationContext, new Object[] {this}); supportedApplicationListener = true; - } catch (Throwable t) { + } catch (Throwable t) { + if (applicationContext instanceof AbstractApplicationContext) { + try { + Method method = AbstractApplicationContext.class.getDeclaredMethod("addListener", new Class[]{ApplicationListener.class}); // 兼容Spring2.0.1 + if (! method.isAccessible()) { + method.setAccessible(true); + } + method.invoke(applicationContext, new Object[] {this}); + supportedApplicationListener = true; + } catch (Throwable t2) { + } + } } } } @@ -92,7 +104,7 @@ public class ServiceBean extends ServiceConfig implements InitializingBean if (delay == null && provider != null) { delay = provider.getDelay(); } - return supportedApplicationListener && delay != null && delay.intValue() == -1; + return supportedApplicationListener && (delay == null || delay.intValue() == -1); } @SuppressWarnings({ "unchecked" })