最新要闻
- 6月26日盛天网络跌7.50%,万家品质生活混合A基金重仓该股
- 鼎际得6月26日盘中涨停_全球今热点
- 出游人次破亿 端午假期旅游需求持续释放
- 环球视讯!汪小菲晒一双儿女合影,网友评价戳心,内涵大S作为妈妈的不作为|时快讯
- 内蒙古加强暑期旅游市场安全管理
- 引进项目200多个 60多个项目投运 落地产品1000余种 新区全力打造千亿级绿色化工园区
- 新时达:目前与华为暂无工业机器人业务方面合作 世界新要闻
- 环球速看:河南:产教融合助力服装产业数智化人才培育
- 2023河南高招咨询大会在郑州启幕 逾700所高校为考生“面对面”答疑
- (共话中国经济新机遇)专访:世界对中国的发展与机遇充满期待——访世界经济论坛总裁布伦德 每日讯息
- 2023版30克熊猫银币现在市场价是多少(2023年06月26日)
- 618初战扫地机器人增速第一,石头科技大涨近10%|世界快消息
- 快看点丨短讯!热推荐:当前热点-天天头条:新消息丨即时焦点:世界看点:智利进口硼酸商品报价动态(2023-06-25) 天天热议 最新资讯|每日视讯-今日快讯
- 魅族与极星汽车合作成立合资公司
- 排列三2023167期祥龙看三预测
- 【全球新视野】年内累计发行176只新股,共募资2106.30亿元
手机
因关联方穿透管理不到位等4项案由,黑龙江密山农商行收100万元罚单
浦东这个街道开启“志愿者+”增能培训,推动新时代文明实践工作再上新台阶
- 因关联方穿透管理不到位等4项案由,黑龙江密山农商行收100万元罚单
- 浦东这个街道开启“志愿者+”增能培训,推动新时代文明实践工作再上新台阶
- 观焦点:国铁集团:端午5天全国铁路送客逾7000万
- 环球热门:博创科技:400G-DR4模块已实现量产出货
- 产业一线招人难,韩国将增发外籍熟练劳工长期就业签证 天天热讯
- 天天快资讯:武汉火影数字|房地产宣传片拍摄制作公司 地产三维动画宣传片
家电
spring启动流程 (1) 流程概览_天天通讯
本文将通过阅读AnnotationConfigApplicationContext源码,分析Spring启动流程。
创建AnnotationConfigApplicationContext
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();applicationContext.register(XxConfig.class);applicationContext.register(YyConfig.class);applicationContext.refresh();XxService xxService = applicationContext.getBean(XxService.class);
核心的启动逻辑都在refresh方法中。
(资料图)
构造方法
public AnnotationConfigApplicationContext() {this.reader = new AnnotatedBeanDefinitionReader(this);this.scanner = new ClassPathBeanDefinitionScanner(this);}
AnnotatedBeanDefinitionReader类
定义了多个register方法,用于向Spring容器注册BeanDefinition。
在创建AnnotatedBeanDefinitionReader时,会向容器注册几个注解驱动处理器:
- org.springframework.context.annotation.internalConfigurationAnnotationProcessor: ConfigurationClassPostProcessor
- BeanFactoryPostProcessor实现,用于解析@Configuration类。
- 按优先级排序,因为在@Configuration类中声明的任何@Bean方法都必须在任何其他BeanFactoryPostProcessor执行之前注册其对应的BeanDefinition。
- org.springframework.context.annotation.internalAutowiredAnnotationProcessor: AutowiredAnnotationBeanPostProcessor
- BeanPostProcessor实现类。
- @Autowired支持处理器。
- org.springframework.context.annotation.internalCommonAnnotationProcessor: CommonAnnotationBeanPostProcessor
- BeanPostProcessor实现类。
- 支持Resource、PostConstruct、PreDestroy等注解。
- org.springframework.context.event.internalEventListenerProcessor: EventListenerMethodProcessor
- org.springframework.context.event.internalEventListenerFactory: DefaultEventListenerFactory
ClassPathBeanDefinitionScanner类
BeanDefinition扫描器,在类路径上检测Bean,并将其注册到Spring容器中。扫描的类是通过类型过滤器检测到的。
refresh方法
public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Tell the subclass to refresh the internal bean factory.ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// Prepare the bean factory for use in this context.prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);// Initialize message source for this context.initMessageSource();// Initialize event multicaster for this context.initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses.onRefresh();// Check for listener beans and register them.registerListeners();// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event.finishRefresh();} catch (BeansException ex) {// Destroy already created singletons to avoid dangling resources.destroyBeans();// Reset "active" flag.cancelRefresh(ex);// Propagate exception to caller.throw ex;} finally {// Reset common introspection caches in Spring"s core, since we// might not ever need metadata for singleton beans anymore...resetCommonCaches();}}}
prepareRefresh方法
Prepare this context for refreshing, setting its startup date and active flag as well as performing any initialization of property sources.
protected void prepareRefresh() {// Switch to active.this.startupDate = System.currentTimeMillis();this.closed.set(false);this.active.set(true);// Initialize any placeholder property sources in the context environment.// Replace any stub property sources with actual instances.// web相关的ApplicationContext有实现initPropertySources();// Validate that all properties marked as required are resolvable:// see ConfigurablePropertyResolver#setRequiredPropertiesgetEnvironment().validateRequiredProperties();// Store pre-refresh ApplicationListeners...if (this.earlyApplicationListeners == null) {this.earlyApplicationListeners = new LinkedHashSet<>(this.applicationListeners);} else {// Reset local application listeners to pre-refresh state.this.applicationListeners.clear();this.applicationListeners.addAll(this.earlyApplicationListeners);}// Allow for the collection of early ApplicationEvents,// to be published once the multicaster is available...this.earlyApplicationEvents = new LinkedHashSet<>();}
obtainFreshBeanFactory方法
Tell the subclass to refresh the internal bean factory.
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {refreshBeanFactory();return getBeanFactory();}
由于AnnotationConfigApplicationContext继承了GenericApplicationContext类,所以此处获取到的是DefaultListableBeanFactory对象。
prepareBeanFactory方法
配置BeanFactory的标准上下文,例如上下文的ClassLoader和后置处理器。
protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) {// Tell the internal bean factory to use the context"s class loader etc.beanFactory.setBeanClassLoader(getClassLoader());// Standard implementation of the BeanExpressionResolver interface,// parsing and evaluating Spring EL using Spring"s expression module.beanFactory.setBeanExpressionResolver( new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader()));beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));// Configure the bean factory with context callbacks.// 支持EnvironmentAware, MessageSourceAware, ApplicationContextAware等beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));beanFactory.ignoreDependencyInterface(EnvironmentAware.class);beanFactory.ignoreDependencyInterface(EmbeddedValueResolverAware.class);beanFactory.ignoreDependencyInterface(ResourceLoaderAware.class);beanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class);beanFactory.ignoreDependencyInterface(MessageSourceAware.class);beanFactory.ignoreDependencyInterface(ApplicationContextAware.class);// BeanFactory interface not registered as resolvable type in a plain factory.// MessageSource registered (and found for autowiring) as a bean.beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory);beanFactory.registerResolvableDependency(ResourceLoader.class, this);beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);beanFactory.registerResolvableDependency(ApplicationContext.class, this);// ApplicationListenerDetector处理器自动将ApplicationListener类型Bean添加容器beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));// Detect a LoadTimeWeaver and prepare for weaving, if found.if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));// Set a temporary ClassLoader for type matching.beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));}// 注册env beanif (!beanFactory.containsLocalBean(ENVIRONMENT_BEAN_NAME)) {beanFactory.registerSingleton(ENVIRONMENT_BEAN_NAME, getEnvironment());}if (!beanFactory.containsLocalBean(SYSTEM_PROPERTIES_BEAN_NAME)) {beanFactory.registerSingleton(SYSTEM_PROPERTIES_BEAN_NAME, getEnvironment().getSystemProperties());}if (!beanFactory.containsLocalBean(SYSTEM_ENVIRONMENT_BEAN_NAME)) {beanFactory .registerSingleton(SYSTEM_ENVIRONMENT_BEAN_NAME, getEnvironment().getSystemEnvironment());}}
postProcessBeanFactory方法
Modify the application context"s internal bean factory after its standard initialization. All bean definitions will have been loaded, but no beans will have been instantiated yet. This allows for registering special BeanPostProcessors etc in certain ApplicationContext implementations.
在标准初始化之后修改ApplicationContext的内部bean工厂。所有的BeanDefinition都将被加载,但还没有任何Bean被实例化。这允许在某些ApplicationContext实现中注册特殊的BeanPostProcessors等。
invokeBeanFactoryPostProcessors方法
实例化并调用注册的所有BeanFactoryPostProcessor,如果指定顺序则按照顺序调用,必须在单例实例化之前调用。
protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) {// 调用BeanFactoryPostProcessorsPostProcessorRegistrationDelegate .invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());// Detect a LoadTimeWeaver and prepare for weaving, if found in the meantime// (e.g. through an @Bean method registered by ConfigurationClassPostProcessor)if (beanFactory.getTempClassLoader() == null && beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));}}
调用BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor。
registerBeanPostProcessors方法
实例化并注册所有BeanPostProcessor,如果指定顺序则按照顺序注册,必须在应用Bean实例化之前调用。
protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) {PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);}
把BeanPostProcessor实例添加到beanPostProcessors中:
- 从容器获取所有的BeanPostProcessor Bean
- 按照以下顺序注册:实现了PriorityOrdered接口、实现了Ordered接口、普通BeanPostProcessor、实现MergedBeanDefinitionPostProcessor接口
private static void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory, List postProcessors) {for (BeanPostProcessor postProcessor : postProcessors) {beanFactory.addBeanPostProcessor(postProcessor);}}
initMessageSource方法
国际化。
protected void initMessageSource() {ConfigurableListableBeanFactory beanFactory = getBeanFactory();if (beanFactory.containsLocalBean(MESSAGE_SOURCE_BEAN_NAME)) {this.messageSource = beanFactory.getBean(MESSAGE_SOURCE_BEAN_NAME, MessageSource.class);// Make MessageSource aware of parent MessageSource.if (this.parent != null && this.messageSource instanceof HierarchicalMessageSource) {HierarchicalMessageSource hms = (HierarchicalMessageSource) this.messageSource;if (hms.getParentMessageSource() == null) {// Only set parent context as parent MessageSource if no parent MessageSource// registered already.hms.setParentMessageSource(getInternalParentMessageSource());}}} else {// Use empty MessageSource to be able to accept getMessage calls.DelegatingMessageSource dms = new DelegatingMessageSource();dms.setParentMessageSource(getInternalParentMessageSource());this.messageSource = dms;beanFactory.registerSingleton(MESSAGE_SOURCE_BEAN_NAME, this.messageSource);}}
initApplicationEventMulticaster方法
初始化ApplicationEventMultimaster,如果Context中未定义,则使用SimpleApplicationEventMultimaster。
protected void initApplicationEventMulticaster() {ConfigurableListableBeanFactory beanFactory = getBeanFactory();if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {this.applicationEventMulticaster = beanFactory.getBean( APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);} else {this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);beanFactory.registerSingleton( APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);}}
onRefresh方法
可以重写的模板方法,以添加指定的刷新逻辑。在初始化特殊Bean时调用,在实例化单例之前调用。
默认什么都不做。
SpringBoot中的ServletWebServerApplicationContext实现类在这个阶段创建WebServer。
registerListeners方法
添加实现ApplicationListener的Bean作为侦听器。不会影响其他侦听器,这些侦听器可以在不使用Bean的情况下添加。
finishBeanFactoryInitialization方法
完成Bean工厂的初始化,初始化所有剩余的单例Bean。
protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) {// Initialize conversion service for this context.if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME) &&beanFactory.isTypeMatch(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class)) {beanFactory.setConversionService(beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));}// Register a default embedded value resolver if no bean post-processor// (such as a PropertyPlaceholderConfigurer bean) registered any before:// at this point, primarily for resolution in annotation attribute values.if (!beanFactory.hasEmbeddedValueResolver()) {beanFactory.addEmbeddedValueResolver(strVal -> getEnvironment().resolvePlaceholders(strVal));}// Initialize LoadTimeWeaverAware beans early to allow for registering their transformers early.String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false);for (String weaverAwareName : weaverAwareNames) {getBean(weaverAwareName);}// Stop using the temporary ClassLoader for type matching.beanFactory.setTempClassLoader(null);// Allow for caching all bean definition metadata, not expecting further changes.beanFactory.freezeConfiguration();// Instantiate all remaining (non-lazy-init) singletons.beanFactory.preInstantiateSingletons();}
finishRefresh方法
完成刷新工作,调用LifecycleProcessor的onRefresh()方法并发布ContextRefreshedEvent事件。
protected void finishRefresh() {// Clear context-level resource caches (such as ASM metadata from scanning).clearResourceCaches();// Initialize lifecycle processor for this context.initLifecycleProcessor();// Propagate refresh to lifecycle processor first.getLifecycleProcessor().onRefresh();// Publish the final event.publishEvent(new ContextRefreshedEvent(this));// Participate in LiveBeansView MBean, if active.LiveBeansView.registerApplicationContext(this);}
启动流程
- 创建AnnotationConfigApplicationContext对象
- 创建AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScanner
- 向容器注册几个注解驱动处理器:ConfigurationClassPostProcessor, AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor等
- 调用applicationContext.register(XxConfig.class)注册配置类
- 调用refresh()方法:
- prepareRefresh方法准备工作:初始化PropertySources、validateRequiredProperties等
- Refresh the internal beanFactory
- 配置BeanFactory的标准上下文,例如上下文的ClassLoader和后置处理器
- 实例化并调用注册的所有BeanFactoryPostProcessor,如果指定顺序则按照顺序调用,必须在单例实例化之前调用
- 实例化并注册所有BeanPostProcessor,如果指定顺序则按照顺序注册,必须在应用Bean实例化之前调用
- 初始化MessageSource
- 初始化ApplicationEventMultimaster,如果Context中未定义,则使用SimpleApplicationEventMultimaster
- onRefresh方法,SpringBoot中的ServletWebServerApplicationContext实现类在这个阶段创建WebServer
- 添加实现ApplicationListener的Bean作为侦听器
- 完成Bean工厂的初始化,初始化所有剩余的单例Bean
- 完成刷新工作,调用LifecycleProcessor的onRefresh()方法并发布ContextRefreshedEvent事件
关键词:
spring启动流程 (1) 流程概览_天天通讯
java~CompactStrings字符压缩技术
6月26日盛天网络跌7.50%,万家品质生活混合A基金重仓该股
全球首个!武汉新城这座“黑灯工厂”投产,可规模化生产水稻“种”出的人血清白蛋白
鼎际得6月26日盘中涨停_全球今热点
每日快看:推动新时代共青团工作迈上新台阶创造新业绩
当前热点-房贷利率再降!首套低至3.6%,贷款百万比四年前少还14万
快消息!高质量发展调研行|科技“关键变量”撬动产业“最大增量”——三亚崖州湾科技城建设观察
扬杰科技(300373.SZ):随着AI服务器产业景气度上升,预计会对公司业绩产生一定的正向影响
因关联方穿透管理不到位等4项案由,黑龙江密山农商行收100万元罚单
环球速递!靴子落地,内外资逐渐调仓
06月26日福建皮棉为17440元_环球今日讯
今年夏天会大规模停电吗?专家称不可能再追求100%可靠供电_环球微速讯
商务部美大司负责人就美方以涉芬太尼问题为由起诉中国企业答记者问
福岛核废水究竟有无危害?《自然》刊文解释
全球报道:学习时节|“坚持厉行禁毒方针,打好禁毒人民战争”
14亿人居然带不动消费?比房价下跌更可怕的事,正在各城市上演
丰立智能:公司谐波减速器目前在初始发展阶段
世界球精选!现场报道|当杭州遇见兰州——“浙里出发·去兰州”2023“黄河之滨也很美”旅游推介会(杭州站)在杭召开
商品期货收盘跌多涨少,焦煤、焦炭跌超4%,尿素涨3%_世界新视野
颜值高、动力强!自主运动硬碰硬!影豹R/长安UNI-V和MG7怎么选?
新田开展“禁毒宣传进万家”活动_世界讯息
全球即时看!大摩:中石油(00857)为行业首选 中石化(00386)炼油及化工业务利润率仍疲弱
精选!柯力传感等55股近五日获机构净买入
薪资涨幅怎么算-薪资涨幅怎么算excel_热门看点
2023湖南高考1分档统计表来啦!快来看看你的全省排名-每日速读
全球微动态丨京东物流:余睿已辞任执行董事、首席执行官,胡伟接任
揭秘真实的「AI民工」:为生存机械地「做任务」 时薪低至1美元
IBM接近以361亿元收购软件公司Apptio
出游人次破亿 端午假期旅游需求持续释放
全球播报:三菱日联金融集团(MUFG.US)将以4.67亿美元收购印尼汽车贷款提供商Mandala Finance
消息!四部门开展专项行动 促进劳动关系和谐稳定
环球视讯!汪小菲晒一双儿女合影,网友评价戳心,内涵大S作为妈妈的不作为|时快讯
美国药物滥用再致惨案!8个月婴儿服用芬太尼过量死亡 其父母被捕 当前看点
速看:4000万预约开放世界新游!网易旗舰级手游《逆水寒》公测预下载开启
每日快报!彭州法院:邀请学生旁听庭审 禁毒教育“零距离”
内蒙古加强暑期旅游市场安全管理
甘肃高考成绩及各批次录取最低控制分数线公布 每日快播
当前关注:女篮亚洲杯-中国女篮大胜黎巴嫩 小组赛旗开得胜
广州市规划和自然资源局赴北京市规划展览馆参观调研 当前速讯
浦东这个街道开启“志愿者+”增能培训,推动新时代文明实践工作再上新台阶
陈梦孙颖莎上奥运似乎已成定局 环球快讯
引进项目200多个 60多个项目投运 落地产品1000余种 新区全力打造千亿级绿色化工园区
端午小长假全国铁路累计发送旅客7037.9万人次|微资讯
每日速看!女性被骗去缅甸有多惨 ?美女大学生被男友骗到缅甸边界残忍杀害,190的身高却出卖了他!
LPL国家队名单公布,引发巨大争议!BLG仅入选一人,EDG成为赢家
滨州市90项举措全面“升级”群众健康获得感-世界热头条
焦点讯息:邱家店镇宋官庄村硕果挂满枝 采摘正当时
港股午评:恒指跌0.14%,恒生科技指数涨0.28%
世界快讯:袁潇洋:虚拟电厂将转变电力调度的机制从而提升电网韧性
狗狗皮肤变黑是什么原因(狗狗的皮肤变成黑色怎么回事)
观焦点:国铁集团:端午5天全国铁路送客逾7000万
新时达:目前与华为暂无工业机器人业务方面合作 世界新要闻
东方园林:上半年生态工程中标金额约30亿元 已超去年全年中标金额 当前热点
全球即时看!“网红”的迁徙:主播涌向东南亚
京津冀等地高温天气27日起上线 局地气温或破历史极值
什么情况下可以否定公司的法律人格_环球热头条
海南自由贸易港封关前禁毒三年“固本防风险”启动仪式在海口举行 环球微资讯
每日热闻!首批集中供地基本出炉,应增加供应缓解僧多粥少矛盾
畜禽养殖行业报告 2023年畜禽养殖市场深度全景调研及畜禽养殖行业未来展望
当前热讯:【环球财经】日本工商界关注第六届进博会开放平台作用
在陪伴中快乐成长 在游戏中插上创造力的翅膀
环球速看:河南:产教融合助力服装产业数智化人才培育
2023河南高招咨询大会在郑州启幕 逾700所高校为考生“面对面”答疑
速递!武汉首批集中供地推60宗地 总起价超700亿元
中国中部第一城,冲刺2万亿元GDP!【附武汉市产业结构分析】 世界焦点
(共话中国经济新机遇)专访:世界对中国的发展与机遇充满期待——访世界经济论坛总裁布伦德 每日讯息
2023年浙江高考成绩分数段表出炉!|世界看热讯
环球热门:博创科技:400G-DR4模块已实现量产出货
热推荐:明起北方高温再度来袭:局地或出现极端高温
爱心志愿者慰问残疾学子钟华强
总投资38.5亿元,荣成市成功“牵手”5个项目
每日聚焦:变压器结构及工作原理(变压器结构)
模拟经营游戏《我的幻想乡》正式登陆Steam-当前短讯
热头条丨光伏概念股午后继续反弹 帝科股份涨超10%
最新快讯!研报掘金丨财通证券:清越科技电子纸模组有望快速增长,首予“增持”评级
陈楚生二胎得子,甜蜜感谢老婆,大儿子抱着弟弟,一家人超幸福
中华传统美德怎样融入思政课教学
月均增长达“百亿级” 六问快递业如何实现提速发展
产业一线招人难,韩国将增发外籍熟练劳工长期就业签证 天天热讯
2023全球汽车零部件供应商百强榜:13家中国企业上榜 宁德时代排名第五
环球视点!一加Ace2 Pro入网,将成为业内首款24GB物理内存手机
6月26日黄金期货走势分析:进一步反弹似乎遇到阻力-全球时讯
天天观察:钼铁行业市场有多大?钼铁行业市场深度调研报告2023
全球聚焦:《暗黑4》等游戏登陆困难原因找到了 暴雪承认遭遇黑客攻击
家有一老如有一宝!19分钟15分6板,成女篮进攻轴,展现全面性 全球热议
获屈原杯一等奖 戴逢红:创作更好的诗歌向屈原致敬
2023版30克熊猫银币现在市场价是多少(2023年06月26日)
全球快看点丨小心!名为“奶茶粉” 实为“神仙水”“迷奸水”
热推荐:巨大进展!曝姆巴佩交易接近完成,未来两周内敲定加盟皇马
天天快资讯:武汉火影数字|房地产宣传片拍摄制作公司 地产三维动画宣传片
天天实时:蒲公英配枸杞什么作用(你知道多少)
焦点速读:英派斯(002899):特定股东股份减持计划实施进展
《假如舰长是雷奥尼克斯》第三章
618初战扫地机器人增速第一,石头科技大涨近10%|世界快消息
【不要做“看淡一切”的伪佛系青年,别被无知的狂妄耽误了自己,成年人要理直气...
环球头条:F1赛车新游戏《New Star GP》上架:支持中文
洛阳市统筹区内就医城乡居民医保能直接结算吗?
环球今头条!阳光保i家版重疾险有什么亮点?怎么样?
快看点丨短讯!热推荐:当前热点-天天头条:新消息丨即时焦点:世界看点:智利进口硼酸商品报价动态(2023-06-25) 天天热议 最新资讯|每日视讯-今日快讯