重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
dubbo中ServiceBeanExportedEvent的作用是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站建设、成都网站建设、郧西网络推广、重庆小程序开发、郧西网络营销、郧西企业策划、郧西品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供郧西建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
dubbo-2.7.3/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/context/event/ServiceBeanExportedEvent.java
public class ServiceBeanExportedEvent extends ApplicationEvent { /** * Create a new ApplicationEvent. * * @param serviceBean {@link ServiceBean} bean */ public ServiceBeanExportedEvent(ServiceBean serviceBean) { super(serviceBean); } /** * Get {@link ServiceBean} instance * * @return non-null */ public ServiceBean getServiceBean() { return (ServiceBean) super.getSource(); } }
ServiceBeanExportedEvent继承了ApplicationEvent,其source为ServiceBean
dubbo-2.7.3/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/ServiceBean.java
public class ServiceBeanextends ServiceConfig implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener , BeanNameAware, ApplicationEventPublisherAware { //...... /** * @since 2.6.5 */ @Override public void export() { super.export(); // Publish ServiceBeanExportedEvent publishExportEvent(); } /** * @since 2.6.5 */ private void publishExportEvent() { ServiceBeanExportedEvent exportEvent = new ServiceBeanExportedEvent(this); applicationEventPublisher.publishEvent(exportEvent); } //...... }
ServiceBean的export方法会publishExportEvent
dubbo-2.7.3/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ReferenceAnnotationBeanPostProcessor.java
public class ReferenceAnnotationBeanPostProcessor extends AnnotationInjectedBeanPostProcessor implements ApplicationContextAware, ApplicationListener { //...... @Override public void onApplicationEvent(ApplicationEvent event) { if (event instanceof ServiceBeanExportedEvent) { onServiceBeanExportEvent((ServiceBeanExportedEvent) event); } else if (event instanceof ContextRefreshedEvent) { onContextRefreshedEvent((ContextRefreshedEvent) event); } } private void onServiceBeanExportEvent(ServiceBeanExportedEvent event) { ServiceBean serviceBean = event.getServiceBean(); initReferenceBeanInvocationHandler(serviceBean); } private void initReferenceBeanInvocationHandler(ServiceBean serviceBean) { String serviceBeanName = serviceBean.getBeanName(); // Remove ServiceBean when it's exported ReferenceBeanInvocationHandler handler = localReferenceBeanInvocationHandlerCache.remove(serviceBeanName); // Initialize if (handler != null) { handler.init(); } } //...... }
ReferenceAnnotationBeanPostProcessor实现了ApplicationListener的onApplicationEvent方法,接收到ServiceBeanExportedEvent事件时执行onServiceBeanExportEvent,这里从localReferenceBeanInvocationHandlerCache移除,然后执行ReferenceBeanInvocationHandler的init方法
ServiceBeanExportedEvent继承了ApplicationEvent,其source为ServiceBean;ServiceBean的export方法会publishExportEvent;ReferenceAnnotationBeanPostProcessor实现了ApplicationListener的onApplicationEvent方法,接收到ServiceBeanExportedEvent事件时执行onServiceBeanExportEvent,这里从localReferenceBeanInvocationHandlerCache移除,然后执行ReferenceBeanInvocationHandler的init方法
看完上述内容,你们掌握dubbo中ServiceBeanExportedEvent的作用是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!