【Spring源码】- 05 扩展点之BeanPostProcessor

2023-03-28 16:27:49   来源:腾讯云

类结构

BeanPostProcessorBeanFactoryPostProcessorSpring中两个最重要的扩展的。如果说BeanFactoryPostProcessor是面向IoC进行扩展,BeanPostProcessor就是面向Bean进行扩展。

从上面类结构图可以看出,BeanPostProcessor是一个顶层接口,下面有衍生出几个接口,实现对Bean创建、初始化等各个阶段进行更细化的扩展,所以BeanPostProcessor要比BeanFactoryPostProcessor复杂一些,可以实现更多扩展场景。


(资料图片仅供参考)

注册顺序

BeanPostProcessor被注册到IoC中才能起作用,在refresh()方法中registerBeanPostProcessors(beanFactory);这一语句完成BeanPostProcessor的注册工作,注册使用:addBeanPostProcessor(BeanPostProcessor beanPostProcessor)方法完成。

注册BeanPostProcessor也涉及到先后顺序关系,大致逻辑总结如下:

1、获取实现PriorityOrdered接口的BeanPostProcessor,然后通过getBean()方法实例化,排序后注册到容器中;2、获取实现Ordered接口的BeanPostProcessor,然后通过getBean()方法实例化,排序后注册到容器中;3、获取常规没有实现PriorityOrdered和Ordered接口BeanPostProcessor,然后通过getBean()方法实例化,注册到容器中;4、上述步骤中MergedBeanDefinitionPostProcessor类型会单独存储到internalPostProcessors集合中,排序后保证放到末尾5、最后移除ApplicationListenerDetector重新追加到最末尾

上面只是BeanPostProcessor注册先后顺序关系,并不会涉及到BeanPostProcessor的执行,由于BeanPostProcessor扩展出几个子类,下面我们来分析下每个子类的执行时机。

BeanPostProcessor

执行时机

接口定义见下:

public interface BeanPostProcessor { @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {  return bean; } @Nullable default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {  return bean; }}

之前分析IoC容器启动流程时,介绍过initializeBean()方法完成Beaninit-method初始化工作,BeanPostProcessor就是在init-method执行前后进行扩展。

protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) { Object wrappedBean = bean; if (mbd == null || !mbd.isSynthetic()) {        //触发BeanPostProcessor#postProcessBeforeInitialization()方法执行  wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName); }      //执行init-method方法 invokeInitMethods(beanName, wrappedBean, mbd);   if (mbd == null || !mbd.isSynthetic()) {        //触发BeanPostProcessor#postProcessAfterInitialization()方法执行  wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName); } return wrappedBean;}

再来看下这两个方法的调用逻辑:

public Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)   throws BeansException { Object result = existingBean; for (BeanPostProcessor processor : getBeanPostProcessors()) {  Object current = processor.postProcessBeforeInitialization(result, beanName);  if (current == null) {   return result;  }  result = current; } return result;}

如果有postProcessBeforeInitialization()方法返回null,则表示该扩展点提前结束,不再需要继续执行后续BeanPostProcessorpostProcessBeforeInitialization方法。

再来看下postProcessAfterInitialization()方法执行逻辑是一样的:

@Override public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)   throws BeansException {  Object result = existingBean;  for (BeanPostProcessor processor : getBeanPostProcessors()) {   Object current = processor.postProcessAfterInitialization(result, beanName);   if (current == null) {    return result;   }   result = current;  }  return result; }

使用场景

invokeInitMethods(beanName, wrappedBean, mbd);方法执行Beaninit-method方法进行初始化,进入这个方法可以发现,这里只会执行实现InitializingBean@Bean(initMethod="xxx")这两种方式设置的init-method方法,我们平时使用很多的@PostConstruct注解方式,其实是通过InitDestroyAnnotationBeanPostProcessor这个扩展类实现:

InitDestroyAnnotationBeanPostProcessor类实现了DestructionAwareBeanPostProcessorMergedBeanDefinitionPostProcessor这两个接口,间接方式继承BeanPostProcessorInitDestroyAnnotationBeanPostProcessor就是在postProcessBeforeInitialization()方法中完成了对@PostConstruct注解方法的调用,所以其执行优先级比InitializingBean@Bean(initMethod="xxx")这两种方式更加靠前。

如果你需要在init-methodBean的初始化执行前后进行扩展,可以使用此接口实现。比如:判断Bean是否是线程池类,如果是则统一设置管理的线程名前缀:

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof ThreadPoolTaskExecutor) {  ((ThreadPoolTaskExecutor) bean).setThreadNamePrefix("Post-"); } return bean;}

还比如ApplicationListenerDetectorpostProcessAfterInitialization()方法中实现将ApplicationListener类型的单例Bean注册到事件多播器上,实现对事件的监听:

public Object postProcessAfterInitialization(Object bean, String beanName) { if (bean instanceof ApplicationListener) {  Boolean flag = this.singletonNames.get(beanName);  if (Boolean.TRUE.equals(flag)) {   // 如果当前 ApplicationListener bean scope 是 singleton 单例模式,则将它注册到应用的事件多播器上   this.applicationContext.addApplicationListener((ApplicationListener) bean);  }  else if (Boolean.FALSE.equals(flag)) {   // 如果ApplicationListener bean scope 不是 singleton 单例模式,则尝试输出警告日志,说明情况,并移除   //所以ApplicationListener类型的只能是单例模式才会起作用   this.singletonNames.remove(beanName);  } } return bean;}

还比如ApplicationContextAwareProcessor这个就是在postProcessBeforeInitialization()方法中实现如ApplicationContextAwareEnvironmentAware*Aware接口注入功能。实现原理非常简单,就是判断Bean是否实现接口,然后通过setter方式注入即可:

private void invokeAwareInterfaces(Object bean) { if (bean instanceof EnvironmentAware) {  ((EnvironmentAware) bean).setEnvironment(this.applicationContext.getEnvironment()); } if (bean instanceof EmbeddedValueResolverAware) {  ((EmbeddedValueResolverAware) bean).setEmbeddedValueResolver(this.embeddedValueResolver); } if (bean instanceof ResourceLoaderAware) {  ((ResourceLoaderAware) bean).setResourceLoader(this.applicationContext); } if (bean instanceof ApplicationEventPublisherAware) {  ((ApplicationEventPublisherAware) bean).setApplicationEventPublisher(this.applicationContext); } if (bean instanceof MessageSourceAware) {  ((MessageSourceAware) bean).setMessageSource(this.applicationContext); } if (bean instanceof ApplicationContextAware) {  ((ApplicationContextAware) bean).setApplicationContext(this.applicationContext); }}

InstantiationAwareBeanPostProcessor

前面分析BeanPostProcessor接口是在Bean的init-method方法执行前后进行扩展,其子接口InstantiationAwareBeanPostProcessor则可以在Bean的创建前后进行扩展,所以此扩展比BeanPostProcessor扩展更靠前。

接口定义见下:

public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor {    //Bean创建之前回调该方法,beanClass就是将要被创建的Bean对应的Class信息 @Nullable default Object postProcessBeforeInstantiation(Class beanClass, String beanName) throws BeansException {  return null; }    //Bean创建之后回调该方法,参数bean就是创建完成的Bean对象 default boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {  return true; }    //postProcessProperties()方法在postProcessAfterInstantiation()方法之后紧挨着执行,其提供PropertyValues类型入参,所以在该方法中可以实现依赖操作 @Nullable default PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName)   throws BeansException {  return null; }    //这个方法标注@Deprecated已经被废弃了,被postProcessProperties()方法取代了 @Deprecated @Nullable default PropertyValues postProcessPropertyValues(   PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeansException {  return pvs; }}

createBean()方法中Object bean = resolveBeforeInstantiation(beanName, mbdToUse);这条语句中会触发对postProcessBeforeInstantiation()方法的执行。

protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)   throws BeanCreationException {       Object bean = resolveBeforeInstantiation(beanName, mbdToUse);//触发对postProcessBeforeInstantiation()方法的执行 if (bean != null) {  return bean; }    ...  Object beanInstance = doCreateBean(beanName, mbdToUse, args);//创建Bean实例(一般真正创建Bean的方法) ...}

InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()方法有个重要特性:如果该方法返回非null结果,则表示Bean提前创建完成,同时也会忽略掉后续的依赖注入、init-method初始化等步骤执行,最后只需要执行下BeanPostProcessor#postProcessAfterInitialization这个方法则整个Bean的创建流程就全部完成。

总结:在创建对象之前调用了postProcessBeforeInstantiation方法可以实现给扩展点一次创建代理的机会,如果代理对象返回不为空则不再继续常规方式创建Bean

我们再来看下InstantiationAwareBeanPostProcessor接口中定义的另两个方法执行时机,Bean创建完成后会执行populateBean()进行依赖注入,它们就是在这个方法中进行触发回调,pupulateBean()方法大致见下:

protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) {      //执行InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation方法回调 if (!mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {  for (BeanPostProcessor bp : getBeanPostProcessors()) {   if (bp instanceof InstantiationAwareBeanPostProcessor) {    InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;    if (!ibp.postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)) {     return;    }   }  } } // 注解注入:后置处理器ibp#postProcessProperties,大名鼎鼎的@Autowired就是在这处理的。 PropertyDescriptor[] filteredPds = null; if (hasInstAwareBpps) {        //执行InstantiationAwareBeanPostProcessor#postProcessProperties方法回调  for (BeanPostProcessor bp : getBeanPostProcessors()) {   if (bp instanceof InstantiationAwareBeanPostProcessor) {    InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;    PropertyValues pvsToUse = ibp.postProcessProperties(pvs, bw.getWrappedInstance(), beanName);    if (pvsToUse == null) {     if (filteredPds == null) {      //获取出对象的所有set get方法,现在是有一个 getClass()方法,因为继承了Object, 没什么其他卵用      filteredPds = filterPropertyDescriptorsForDependencyCheck(bw, mbd.allowCaching);     }     //postProcessPropertyValues方法已废弃,被postProcessProperties替代     pvsToUse = ibp.postProcessPropertyValues(pvs, filteredPds, bw.getWrappedInstance(), beanName);     if (pvsToUse == null) {      return;     }    }    pvs = pvsToUse;   }  } }   if (pvs != null) {  applyPropertyValues(beanName, mbd, bw, pvs); }}

上面代码翻译下大概就是:先执行InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation方法回调,然后再去执行InstantiationAwareBeanPostProcessor#postProcessProperties,最后再去执行applyPropertyValues()完成PropertyValue方式的依赖注入。这里有个大名鼎鼎的@Autowired@Value方式的依赖注入,就是借助于InstantiationAwareBeanPostProcessor#postProcessProperties()方法实现,这个实现类就是:AutowiredAnnotationBeanPostProcessor,简单看下依赖注入逻辑:

public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) { /** * 从缓存中找到此类的@Autowired、@Value注解元数据,尝试注入 * InjectionMetadata,持有待注入的元数据信息,执行inject()方法,开始注入属性或方法参数。 */ InjectionMetadata metadata = findAutowiringMetadata(beanName, bean.getClass(), pvs); try {  //为beanName填充上属性bean  metadata.inject(bean, beanName, pvs); } catch (BeanCreationException ex) {  throw ex; } catch (Throwable ex) {  throw new BeanCreationException(beanName, "Injection of autowired dependencies failed", ex); } return pvs;}

这里有意义的代码就两行:

1、InjectionMetadata metadata = findAutowiringMetadata(beanName, bean.getClass(), pvs);获取Bean中需要依赖注入注入的元素,封装成一个InjectionMetadata对象,该对象有两个重要属性:

targetClass指定目标对象的ClassCollection injectedElements:目标对象中每个需要依赖注入的元素都会封装成一个InjectedElement,然后存储到该集合中。根据@Autowired/@Value注解到字段上还是方法上,InjectedElement又可以分为两类:AutowiredFieldElementAutowiredMethodElement

2、metadata.inject(bean, beanName, pvs);:这个方法内部就是循环,对每个依赖元素InjectedElement调用inject()方法

if (!elementsToIterate.isEmpty()) { for (InjectedElement element : elementsToIterate) {  if (logger.isTraceEnabled()) {   logger.trace("Processing injected element of bean "" + beanName + "": " + element);  }  element.inject(target, beanName, pvs); }}

比如我们一般将@Autowired标注到字段上,则这里会触发AutowiredFieldElement#inject()方法执行:

protected void inject(Object bean, @Nullable String beanName, @Nullable PropertyValues pvs) throws Throwable { Field field = (Field) this.member;//依赖注入字段 Object value;//存储需要注入的值     if (this.cached) {//如果已被缓存,则直接先从缓存中获取依赖注入值  value = resolvedCachedArgument(beanName, this.cachedFieldValue); } else {//还未被缓存过     //1.DependencyDescriptor:用于对该依赖注入描述信息  DependencyDescriptor desc = new DependencyDescriptor(field, this.required);  desc.setContainingClass(bean.getClass());  Set autowiredBeanNames = new LinkedHashSet<>(1);  Assert.state(beanFactory != null, "No BeanFactory available");  TypeConverter typeConverter = beanFactory.getTypeConverter();  try {            /*            2.查找依赖注入的值            比如:            @Autowired            private TestService03 testService03;            这个value就是从IoC容器中查找到的TestService03对象            还比如:@Value("${spring.name}"),这个value就是从Spring上下文环境变量中解析出的spring.name变量值            */   value = beanFactory.resolveDependency(desc, beanName, autowiredBeanNames, typeConverter);  }  catch (BeansException ex) {   throw new UnsatisfiedDependencyException(null, beanName, new InjectionPoint(field), ex);  }        //3.下面synchronized块主要实现缓存功能,已被解析过的包装成ShortcutDependencyDescriptor类型,上面resolvedCachedArgument对这种类型会特殊处理  synchronized (this) {   if (!this.cached) {    if (value != null || this.required) {     this.cachedFieldValue = desc;     registerDependentBeans(beanName, autowiredBeanNames);     if (autowiredBeanNames.size() == 1) {      String autowiredBeanName = autowiredBeanNames.iterator().next();      if (beanFactory.containsBean(autowiredBeanName) &&        beanFactory.isTypeMatch(autowiredBeanName, field.getType())) {       this.cachedFieldValue = new ShortcutDependencyDescriptor(           desc, autowiredBeanName, field.getType());      }     }    }    else {     this.cachedFieldValue = null;    }    this.cached = true;   }  } }    //4.查找到的依赖值不为null,则使用反射方式注入,因为是通过反射方式,所以@Autowired、@Value是不需要setter/getter方法也可以注入 if (value != null) {  //通过反射方式将查找到的需要依赖注入的值设置到对象实例中  ReflectionUtils.makeAccessible(field);  field.set(bean, value); }}

SmartInstantiationAwareBeanPostProcessor

InstantiationAwareBeanPostProcessor还有个子接口:SmartInstantiationAwareBeanPostProcessor,其定义如下:

public interface SmartInstantiationAwareBeanPostProcessor extends InstantiationAwareBeanPostProcessor {    //推断类型 @Nullable default Class predictBeanType(Class beanClass, String beanName) throws BeansException {  return null; }    //根据一定规则推断出Bean中优选的构造方法 @Nullable default Constructor[] determineCandidateConstructors(Class beanClass, String beanName)   throws BeansException {  return null; } default Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {  return bean; }}

SmartInstantiationAwareBeanPostProcessor接口有三个方法,在实例创建前智能判断实例类型、智能判断构造函数、提起获取暴露Bean引用,该接口主要是spring框架内部使用,开发时很少去扩展该接口。

这里主要注意第三个方法:getEarlyBeanReference(),这个扩展方法主要与Spring中的循环依赖有关系。前面分析IoC容器启动时分析过:为了解决Spring中的循环依赖问题,在doCreateBean()方法内部,会将刚创建还未来得及进行依赖注入和初始化的半成品Bean提前暴露出去,addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));,注意这里不是直接将Bean暴露出去,而是通过() -> getEarlyBeanReference(beanName, mbd, bean)这句将Bean包装成ObjectFactory类型再暴露出去。

这里的一个核心就是:为什么不直接暴露Bean,而是将Bean包装成ObjectFactory再去暴露?将Bean包装成ObjectFactory再去暴露,调用getObject()方法时会触发SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference方法回调。

分析到这里,还不够完善,因为你可能会问:那这个方法回调又可以给我们解决什么问题呢?

可以利用Spring AOP原理来回答这个问题,Spring AOP主要基于AnnotationAwareAspectJAutoProxyCreator这个类实现,这个类实现了BeanPostProcessor接口,在postProcessAfterInitialization()方法中对创建完成的Bean采用动态代理方式将增强逻辑织入进去。

如果存在这样情况:A依赖BB同时依赖A,这就是所说的Spring循环依赖,但是如果我们对A采用了AOP增强,这个过程会是怎样情况呢?

A对象创建完成后,由于可能会存在循环依赖问题,所以Spring会提前将A暴露出去;然后对A进行依赖注入,发现A依赖B,然后A就卡主了,通过getBean(B)获取B实例时,这时就会进入B对象创建流程;同样B对象创建完成后并将B对象提前暴露出去,然后开始执行B对象的依赖注入,通过getBean(A)方式获取,因为A已经提前暴露出去了,所以获取A是没问题的;然后B顺利执行完依赖注入、init-method初始化工作,则B整个创建流程全部完成;这时A中通过getBean(B)方法就可以返回B对象,然后依赖注入到A中,然后执行init-method初始化;由于A是有AOP拦截的,在执行完init-method初始化方法后,postProcessAfterInitialization()执行时会给A通过动态代理方式织入增强逻辑;

这时,步骤3中给B注入的是A的原生对象,但是步骤6会给A创建一个代理对象,但是B中这时还是原生对象没法改变,这就会导致有的依赖注入的是原生对象,有的依赖注入的是代理对象,会出现错乱问题。如何解决呢?这个就是SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference这个扩展点作用。

A对象提前暴露时,利用ObjectFactory包装了一层,B对象在进行依赖注入时获取到对象A时,不是直接返回A,而是触发getEarlyBeanReference()方法执行,AnnotationAwareAspectJAutoProxyCreator类在getEarlyBeanReference()方法中实现判断A需要做动态代理,则对A进行动态代理后返回,这时B中依赖注入的就不是原生对象。

总结:SmartInstantiationAwareBeanPostProcessor#getEarlyBeanReference()方法是在循环依赖场景下,对提前暴露的Bean可以通过该扩展点进行处理。只有因为存在循环依赖,才会导致需要需要获取那些提前暴露的Bean时才会触发该扩展点,所以,理解这个扩展点关键在于你对Spring循环依赖的理解。

DestructionAwareBeanPostProcessor

DestructionAwareBeanPostProcessorBeanPostProcessor子接口,其定义如下:

public interface DestructionAwareBeanPostProcessor extends BeanPostProcessor {    //Bean销毁前回调方法 void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException;    //可以根据Bean进行过滤,哪些Bean需要用到当前这个回调 default boolean requiresDestruction(Object bean) {  return true; }}

从名称就可以看出,该扩展主要用于Bean销毁之前,回调时机在:DisposableBeanAdapter#destroy()

public void destroy() { //调用DestructionAwareBeanPostProcessor#postProcessBeforeDestruction,Bean销毁之前回调接口 if (!CollectionUtils.isEmpty(this.beanPostProcessors)) {  for (DestructionAwareBeanPostProcessor processor : this.beanPostProcessors) {   processor.postProcessBeforeDestruction(this.bean, this.beanName);  } } ... ((DisposableBean) this.bean).destroy();//调用DisposableBean.destroy()    ...  }

DestructionAwareBeanPostProcessor接口有个实现类InitDestroyAnnotationBeanPostProcessor,实现对@PreDestroy注解支持。该扩展接口本身是比较简单的,后续分析Bean生命周期destroy流程整体梳理。

MergedBeanDefinitionPostProcessor

MergedBeanDefinitionPostProcessor

public interface MergedBeanDefinitionPostProcessor extends BeanPostProcessor { void postProcessMergedBeanDefinition(RootBeanDefinition beanDefinition, Class beanType, String beanName);    //Spring5.1新增接口,实现BeanDefinition重置通知,一般该方法实现重置前清理metadata等元数据缓存 default void resetBeanDefinition(String beanName) { }}

我们主要看下postProcessMergedBeanDefinition()方法调用时机:

protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)   throws BeanCreationException { //1.创建对象 //2.执行MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition回调方法 synchronized (mbd.postProcessingLock) {  if (!mbd.postProcessed) {    applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);   mbd.postProcessed = true;  } } //3.提前暴露Bean //4.populateBean(beanName, mbd, instanceWrapper); //5.exposedObject = initializeBean(beanName, exposedObject, mbd);}

MergedBeanDefinitionPostProcessor#postProcessMergedBeanDefinition发生在Bean刚创建完成,Bean还未提前暴露之前。MergedBeanDefinitionPostProcessorSpring中有很多的应用,比如:AutowiredAnnotationBeanPostProcessorCommonAnnotationBeanPostProcessorInitDestroyAnnotationBeanPostProcessor等。这个扩展的一般套路是和其它扩展点一起使用,其起到一个帮手角色,postProcessMergedBeanDefinition将需要处理的注解信息解析成元数据信息缓存起来,其它扩展点就可以从缓存中获取需要处理的注解信息进行处理。有关这扩展点更多的情况会在后续案例分析中再详细分析。

总结

BeanFactoryPostProcessorBeanPostProcessorSpring提供的两个最核心、最基础的扩展方式:一个面向IoC进行扩展,另一个面向Bean的创建流程进行各种扩展。BeanPostProcessor及其子类实现了对Bean创建过程中的各种扩展:Bean创建前后、Bean初始化前后、获取提前暴露对象前等等这些。Spring中大量注解简化了我们使用框架的复杂性,而这些注解很大一部分就是基于这些扩展进行处理,学习这些扩展点可以帮助我们更好的熟悉Spring的运行机理,同时可以在开发中帮助我们灵活的实现各种功能扩展。

标签:

精彩阅读

【Spring源码】- 05 扩展点之BeanPostProcessor

头条

BeanPostProcessor和BeanFactoryPostProcessor是Spring中两个最重要的扩展的。如果说BeanFactoryPostPr

播报:山西省政府180项重点任务实行清单化管理

头条

山西全面深化抓落实工作机制,将全年重点任务细化分解为180项重点任务清单,明确责任分工,突出日常调度,强化督查督办,建立抓落实“红黑榜”

男子在校门口脚踢箱子手摔外卖驱赶摊贩,城管执法局表示应文明劝离

头条

湖南网友发视频曝光称,一男子在衡阳某职业中专门口脚踢箱子手摔外卖,驱赶摊贩和外卖员。3月28日,涉事学校的工作人员回应称,封闭式学校,外

2022年度全国十大考古新发现公布-天天新消息

头条

2022年度全国十大考古新发现公布---由国家文物局主管。①湖北十堰学堂梁子遗址。④河南偃师二里头都邑多网格式布局

【当前热闻】海口江东桂林洋国家热带农业公园片区控规出炉,规划住宅、医疗、商业!

头条

日前,海口公布2023年土地出让计划,江东新区蝉联年计划供地宗数最多的区域,作为海南自贸港集中展示区,海口江东新区近两年发展加速。今年3月

世界要闻:5G赋能 山西移动助力千行百业数智化升级

头条

近年来,中国移动通信集团山西有限公司(下称山西移动)深化与产业各方的供需对接,强化5G+AICDE(A:人工智能、I:物联网、C:云计算、D:大

中信银行太原分行持续提升跨境金融服务 助力实体经济发展|要闻

头条

中信银行太原分行积极贯彻国家“稳外资稳外贸”决策部署,紧跟企业“走出去”的跨境金融需求,深入落实数字化转型战略,持续推进跨境金融服务

复地集团5亿公司债将付年息 利率4.95%_世界今头条

头条

观点网讯:3月28日,复地(集团)股份有限公司2021年面向专业投资者公开发行公司债券(第一期)2023年付息公告披露,本期债券将于2023年4月6日进

为期13周!太原中院启动“反规避执行”助力营商环境提升|全球热闻

头条

3月27日上午,太原市中院举行全市法院“反规避执行”助力营商环境建设专项活动动员大会。太原市委政法委副书记冯少华、市政府副秘书长李勇存出

今年将在德比的WavensmereHomes夜莺区完工450多套房屋

头条

在价值1 65亿英镑的德比郡皇家医院重建项目中,WavensmereHomes交付的925套房屋和公寓中有一半以上将于2023年完工。占地18

财富

农业银行还款日是哪天?农业银行是国企还是央企?

财富

农业银行还款日是哪天账单日后的第25天农业银行信用卡还款日是在账单日后的第25天,而账单日是由系统随机生成的。目前的账单日为每月10日、

什么是大小非?大小非解禁什么意思?

财富

什么是大小非大小非是指大额小额限售非流通股解禁就是允许上市流通。 大小非解禁就是限售非流通股允许上市。 大非指的是大规模的限售流通

白象股票代码是多少?白象是哪个省的品牌?

财富

白象股票代码是多少白象没有股票代码,因为白象没有上市,所以没有股票代码。白象是哪个省的品牌河南省郑州市郑东新区白象食品股份有限公司正

余额宝到账时间是多久?余额宝到账几天有收益?

财富

余额宝到账时间是多久余额宝分为普通提现和快速提现,普通到账时间为T+1日24:00点前到账(T日15点前转出),若在T日15点后转出,那么到账时

社会保险费一般由谁承担?社会保险费包括哪些?

财富

社会保险费一般由谁承担社会保险费一般由国家、用人单位和被保人三方共同承担。社会保险是由政府强制征收,进行财富分配的一种制度性安排,实

自驾游买什么保险?自驾游是什么意思?

财富

自驾游买什么保险自驾需要买车损险、三者险、全车盗抢险、车上人员责任险。自驾车的字面含义为:驾车者为自己,车辆包括汽车,主要有轿车、

股票涨停可以买吗?股票涨停是好事还是坏事?

财富

股票涨停可以买吗可以。在a股市场上,在交易时间内,只要个股没有停盘,投资者都能进行买卖活动,即当股票涨停时,投资者可以在涨停处进行

au9999是什么意思?au9999是什么黄金?

财富

au9999是什么意思au9999的意思是国家规定的黄金纯度的表示方法。黄金饰品必须打上这类印记。 其实au,就是黄金的化学元素符号,表明此金属

贵金属有哪些?贵金属是属于黄金吗?

财富

贵金属有哪些贵金属主要指金、银和铂族金属(钌、铑、钯、锇、铱、铂)等8种金属元素。贵金属是属于黄金吗不是贵金属不是属于黄金,但是黄金

车辆损失险是什么意思?车辆损失险每年都要交吗?

财富

车辆损失险是什么意思车辆损失险是指保险车辆遭受保险责任范围内的自然灾害或意外事故,造成保险车辆本身损失。车辆损失险其实是保障车子遇

精彩放送

交了定金发现是9个月库存车怎么办?库存车多长时间为库存车?

交了定金发现是9个月库存车怎么办我们交完定金之后发现自己的车子是库存车,我们可以先保存车辆的相关证据,之后和4S店进行协商,向4S店提

【Spring源码】- 05 扩展点之BeanPostProcessor

BeanPostProcessor和BeanFactoryPostProcessor是Spring中两个最重要的扩展的。如果说BeanFactoryPostPr

预售价14.88万元起 依维柯聚星正式开启预售-世界今热点

3月28日,南京依维柯旗下全新产品依维柯聚星正式开启预售,预售价格为14 88万元起。依维柯聚星采用全新设计语言,搭载上汽π2 0T高性能柴油发

14.88万元起 依维柯全新产品聚星开启预售:世界速读

14 88万元起依维柯全新产品聚星开启预售

播报:山西省政府180项重点任务实行清单化管理

山西全面深化抓落实工作机制,将全年重点任务细化分解为180项重点任务清单,明确责任分工,突出日常调度,强化督查督办,建立抓落实“红黑榜”

特斯拉全新Model S/Model X开启国内首批交付

特斯拉全新ModelX和ModelS正式开启交付。新车车头两侧导流装置更为运动,内饰配备Yoke方向盘,性能方面,两款车均搭载三电机全轮驱动系统。-更

焦点播报:小娘惹里玉珠生的孩子是谁的_小娘惹中玉珠怀的是谁的孩子

1、《小娘惹》中玉珠的儿子是:罗伯特的孩子。2、《小娘惹》里几个女性的命运都不太好,菊香虽然勇敢抗婚,但是她却红颜薄命,留下了几岁的女

微头条丨南通城建集团30亿元私募债更新至“已受理”

本期债券拟发行总额为人民币30亿元,债券品种为私募,项目更新至“已受理”。

上海普陀区城建4.5亿中期票据即将回售 利率3.1%

本期债券简称20普陀城投MTN002,发行金额为4 5亿元,债项利率3 1%,将于2023年4月22日回售。

现款正式停产 全新宝马X1计划于上海车展首发

北京时间3月28日,搜狐汽车从相关渠道了解到现款宝马X1(内部代号F49)已于近日正式停产,随后全新一代宝马X1(内部代号U12)将迎来投产。新车

深国际佛山顺德智慧物流产业园于3月22日开工 总建面33.66万平米

项目位于广东省佛山市顺德区,占地面积约300亩,总建筑面积33 66万平方米,规划建设高标准盘道仓库及相关配套设施,为目前佛山市单体规模最大

万达商管10亿中期票据回售 利率调整至6.60% 环球热点评

本期债券简称21大连万达MTN002,发行金额为10亿元,于2023年4月12日进行票据回售及利率调至6 60%。

怀化城建完成发行3亿短期融资券 利率5.05% 天天日报

债券简称23怀化城投SCP001,发行金额为3亿元,息期利率为5 05%,发行期限为270天。

亿达物业:曾益明退出董事长职务 刘兴伟接任|世界速读

曾益明退出董事长职务,刘兴伟接任;王志斌退出董事职务,朱彦刚接任。

北京出台扶持个体工商户26条措施征求意见稿-天天讯息

积极协助个体工商户开展信用修复工作,因疫情等客观因素影响而导致相关失信行为,原则上不列入失信记录。

兴化城投公司18.75亿元私募债更新至“已反馈”-焦点报道

本期债券拟发行总额为人民币18 75亿元,债券品种为私募,项目更新至“已反馈”。

北京控股100亿元公募债项目更新至“已受理”-全球快播报

本期债券拟发行总额为人民币100亿元,债券品种为公募,项目更新至“已受理”。

从绞牙玩到气动的姿态风大众尚酷,这辆小钢炮看上去"很黄很暴力"

从绞牙玩到气动的姿态风大众尚酷,这辆小钢炮看上去

全球微资讯!销量、口碑双丰收 中国重汽全新一代燃气车实力圈粉

销量、口碑双丰收中国重汽全新一代燃气车实力圈粉

将2024年首次亮相 保时捷718 Boxster纯电版谍照-天天热点

保时捷718Boxster纯电版路试谍照曝光,据悉,保时捷新款718Boxster纯电版将于2024年亮相,未来将会在2025年上市。-更多汽车资讯来自网通社。

环球实时:中集车辆2022年逆势破局成功:净利润增24%

中集车辆2022年逆势破局成功:净利润增24%

这款经典的奥迪Quattro拉力赛车建立在路虎揽胜底盘上

奥迪Quattro可以说是有史以来最伟大的拉力赛车之一,但你在这里看到的不是普通的涡轮增压五罐砾石超级跑车。

【天天热闻】奥迪RS驾驶学院珠海站进阶来袭!RS5让你尽情在赛道驰骋

一直以来,跑车以强劲动力和帅气造型就独得年轻消费者的青睐。每次听到跑车阵阵声浪,都在挑逗着每一个热爱跑车的车友心脏,而奥迪RS5轿跑车的

环球热文:三星将提前一个月开始生产iPhone15OLED面板

距离苹果推出iPhone15系列还有不到六个月的时间,TheElec报道称,三星将比预期提前一个月开始为这些iPhone

男子在校门口脚踢箱子手摔外卖驱赶摊贩,城管执法局表示应文明劝离

湖南网友发视频曝光称,一男子在衡阳某职业中专门口脚踢箱子手摔外卖,驱赶摊贩和外卖员。3月28日,涉事学校的工作人员回应称,封闭式学校,外

全球观速讯丨广西柳州建设投资将于2023年5月4日回售公司债

本期债券简称20柳建01,债券代码:163523 SH,将于2023年5月4日进行回售兑付。

热头条丨南昌城投12亿中期票据将付息 利率3.23%

本期债券简称22南昌城投MTN001,发行金额为12亿元,票面利率3 23%,将于2023年4月8日付年息。

热讯:重庆永川高新区建发公司11亿元私募债更新至“已受理”

本期债券拟发行总额为人民币11亿元,债券品种为私募,项目更新至“已受理”。

碧桂园186亿元公募债券项目更新至“已反馈”

本期债券拟发行总额为人民币186亿元,债券品种为公募,项目更新至“已反馈”。

热点聚焦:房地美2月抵押贷款组合总额超3.42万亿美元 为2016年来首次下降

房地美表示,2月份其抵押贷款投资组合总额超过3 42万亿美元,折合成年率下降0 5%,这是自2016年4月以来的首次下降。

景德镇文旅发展10亿中票即将回售本金及利息兑付 利率5.46%:世界时快讯

本期债券简称20景德陶瓷MTN001,发行金额为10亿元,票面利率5 46%,将于2023年3月25日回售本金及利息兑付。

重庆迈瑞城投拟发行9.5亿元短期融资券 期限1年

本期债券注册金额为人民币9 5亿元,本期发行金额不超过人民币9 5亿元,期限1年,无担保。经中诚信国际信用评级有限责任公司评估,发行人主体信

上海徐汇区:力争到2025年新增上市企业20家 储备数量达到500家

徐汇区将充分发挥上交所资本市场服务漕河泾开发区基地的作用,力争到2025年底,新增上市(挂牌)企业20家、储备数量达到500家。

温州城建集团10亿元公募债更新至“已反馈” 环球资讯

本期债券拟发行总额为人民币10亿元,债券品种为公募,项目更新至“已反馈”。

南京江北新区投资集团拟发行10亿元中票 期限5年_每日报道

本期债券注册金额为人民币20亿元,本期发行金额为10亿元,期限不超过5年。经联合资信评估股份有限公司评估,发行人主体信用等级为AAA,无债项

锐界L混动:也许是当前最均衡的30万SUV

锐界L混动:也许是当前最均衡的30万SUV

全球快报:保时捷718纯电动版谍照 将于2024年亮相

日前,有海外媒体拍摄到了保时捷718Boxster纯电动版车型的最新测试谍照。新车是基于PPE纯电平台打造,将于2024年年中进行首发亮相,并计划在20

人行横道标志图片_人行横道标志

1、人行横道标志:提示车辆前方有行人行走,注意车速的标志。2、白底为其主要标志。3、2、注意行人标志:是表示前方道路行人密集,或者有人行

当前聚焦:东方集团:留存资金积极改善公司利润结构 寻找新的利润增长点

近日,东方集团(600811 SH)对外发布了公司回购股份实施结果暨股份变动公告。截至2023年3月24日,公司回购期限已满,公司通过集中竞价交易方

音频管理器怎么设置?音频管理器是什么图标?

音频管理器怎么设置一、安装音频管理器要使用音频管理器,首先需要安装它。可以从网上下载音频管理器的安装文件,然后按照安装向导的提示来

2022年度全国十大考古新发现公布-天天新消息

2022年度全国十大考古新发现公布---由国家文物局主管。①湖北十堰学堂梁子遗址。④河南偃师二里头都邑多网格式布局

手机恶意扣费怎么办?手机恶意扣费能追回吗?

手机恶意扣费怎么办1 如果不小心下载了恶意扣费软件,扣费了。那怎么办?是怨天尤人还是自认倒霉?不,都不用,10086会为你的任性买单。2 在手机

川南渝西地区融合发展总体方案印发 2025年生产总值达到2万亿元

方案提出,到2025年,川南渝西地区融合发展机制基本形成,融合发展水平明显提高,综合经济实力大幅提升,地区生产总值达到2万亿元左右。

天天时讯:深圳国际2022年收入141亿港元 股东应占盈利下跌65%

经董事会考虑集团的利润构成及现金流后,建议2022年度末期股息为每股港币0 257元,每股股息较去年下降69%,股息总额为港币6 14亿元,较去年下降67%。

深圳国际2022年新获取土地面积约181万平 物流园业务收入升14%-重点聚焦

受惠于若干新增园区投入运营,本年度物流园业务的收入较去年同期上升14%至港币15 73亿元。

古兜控股3月28日下午停牌 原因暂未知|快报

3月28日消息,古兜控股公布,股份将于2023年3月28日下午1点正起暂停买卖。

环球观热点:绍兴柯桥区低密宅地14.13亿元完成出让 溢价率30.23%

经110轮竞价绍兴市欣明置业有限公司、绍兴市骐宁贸易有限公司以总价141305万元竞得绍兴柯桥区KQ-26-03-02地块,溢价率30 23%,楼面价16799 55元 平方米。

全新路虎揽胜运动版SVR谍照 将年内发布:每日聚焦

日前,外媒拍摄到了一组全新路虎揽胜运动版SVR路试谍照图,新车正在进行冬季的最后测试阶段,预计将于年内亮相。作为路虎揽胜运动版的高性能车

2023年前面世 纯电动保时捷Cayenne新消息-今日观点

近日,一则关于保时捷纯电动Cayenne的新消息曝光,新车或将于2030年之前面世。保时捷MacanEV将会在今年年晚些时候亮相,并于2024年正式上市,

天天热推荐:a5纸尺寸大小_a5纸尺寸

1、A5纸的尺寸是148×210mm。2、A5纸,就是将A型基本尺寸的纸折叠5次,所以一张A5纸的面积就是基本纸面积的2的5次方分之一,即1 32。3、A5纸是

今热点:欧盟更改内燃机禁令,保时捷或成最大受益者

欧盟重新商议了《2035年欧洲新售燃油轿车和小货车零排放协议》,2035年后欧盟市场可销售添加E-Fuels合成燃料的新车。保时捷布局E-Fuels产业。-

保利置业2022年收入411.27亿元 股东应占溢利同比下降60.4%_微动态

2022年,保利置业收入为411 27亿元,较去年增长35 7%。股东应占溢利为8 16亿元,较去年下降60 4%。每股基本及摊薄后盈利均为21 71分,同比下降

华润万象生活:终止收购诸暨祥生全部股权及浙江祥生2%股权

华润万象生活称订约双方于进一步磋商及讨论后,决定不再进行收购事项。股权转让协议将因此宣告终止,订约双方的所有义务与责任亦按股权转让协

保利置业2022年新增土储建面174.2万平 85个项目实现销售结转:每日焦点

2022年,保利置业共有85个项目实现销售结转,结转金额人民币390亿元,结转面积230 8万平方米,结转均价为人民币16,918元╱平方米。

当前快播:华润万象生活2022年核心股东应占溢利22.25亿元 同比增长30.7%

华润万象生活2022年全年度实现收入人民币120 16亿元,同比增长35 4%。全年毛利36 11亿元,同比增30 9%,毛利率由2021年的31 1%下降至30 1%。

买不起伊兰特N的,买它!

买不起伊兰特N的,买它!

【当前热闻】海口江东桂林洋国家热带农业公园片区控规出炉,规划住宅、医疗、商业!

日前,海口公布2023年土地出让计划,江东新区蝉联年计划供地宗数最多的区域,作为海南自贸港集中展示区,海口江东新区近两年发展加速。今年3月

世界速讯:65万左右的中型车排行榜,实力强大,买车的朋友看过来

手握65万左右,想购置一款65万左右中型车,市面上的车型那么多,到底如何买到适合自己的车型呢?首先需要从自身需求出发,找到自己购车的侧重

环球最资讯丨售31.99万起,阿维塔11单电机版上市

售31 99万起,阿维塔11单电机版上市

带电出发·向快乐启辰”DD-i超混动技术大咖秀

带电出发·向快乐启辰”DD-i超混动技术大咖秀

全球观速讯丨售8.59-9.99万元 东风风神奕炫GS马赫版正式上市

售8 59-9 99万元东风风神奕炫GS马赫版正式上市

全国文物行业职业技能大赛圆满收官

全国文物行业职业技能大赛圆满收官,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重点新闻

天天热推荐:省通信管理局印发《山西中部城市群信息通信基础设施建设实施方案》

省通信管理局印发《山西中部城市群信息通信基础设施建设实施方案》,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业

我省财政统筹724.4亿元实施“六大保障清单”|滚动

我省财政统筹724 4亿元实施“六大保障清单”,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省

长安22万左右的车型推荐,定价亲民,这几款不要错过_当前热门

如果想买一款长安22万左右车型,很多人纠结怎么选择才不后悔,现在小编根据,众车网购车指数排行榜,推荐了2款车型,看完这几款车具体的表现再

世界要闻:5G赋能 山西移动助力千行百业数智化升级

近年来,中国移动通信集团山西有限公司(下称山西移动)深化与产业各方的供需对接,强化5G+AICDE(A:人工智能、I:物联网、C:云计算、D:大

中信银行太原分行持续提升跨境金融服务 助力实体经济发展|要闻

中信银行太原分行积极贯彻国家“稳外资稳外贸”决策部署,紧跟企业“走出去”的跨境金融需求,深入落实数字化转型战略,持续推进跨境金融服务

焦点播报:我省首批省级数字化转型促进中心开始申报

我省首批省级数字化转型促进中心开始申报,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重

省市场监管局开展“春季护苗”专项行动

省市场监管局开展“春季护苗”专项行动,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重点

温州瑞安4亿元挂牌1宗宅地 将于4月26日出让-世界要闻

该地块为瑞安市东山西单元(0577-RA-BH-13)05-48号地块,出让面积24325 95㎡,容积率1 0-2 2,建筑面积53517㎡。地块起价40012 73万元,起始楼面价7477元 ㎡。

平安不动产回售15亿元中票 将于4月24日行权_要闻

该债券简称“20平安不动MTN001”,代码102000831,发行金额15亿元,发行期限3+2年,本计息期债项利率2 77%。

三湘印象考察云南文山州 围绕文旅演艺项目打造、景区业态升级方面|世界快播报

3月28日消息,三湘印象总裁王盛一行前往云南省文山州进行文旅项目考察,并与文山州州委副书记、州长马忠俊等领导进行座谈交流。

绍兴嵊州3.93亿元挂牌1宗商住地 起始楼面价3697元/㎡_世界微头条

该地块位于浦口街道莲塘小学东侧,出让面积59051㎡,容积率1 8,建筑面积106291 8㎡。可建沿街单层商业用房,建筑面积不大于2200㎡;地上住宅

陕西投资集团6.5亿元ABS债券项目更新至“已反馈”|环球要闻

本期债券拟发行总额为人民币6 5亿元,债券品种为资产支持证券(ABS),项目更新至“已反馈”。

今日热搜:山西:到2025年中部城市群建成5G基站4.6万个

《实施方案》提出,到2025年,山西中部城市群建成5G基站4 6万个,平均每万人拥有5G基站数达到25个以上,重点场所5G网络覆盖率达到100%。

世界新消息丨港证监会就实施无纸证券市场而建议制订的附属法例展开咨询

建议的附属法例包括两套新的规则,分别为《证券及期货(无纸证券市场)规则》,旨在列明在无纸证券市场环境下的运作及技术事宜和程序。

万物云朱保全:2023年效益改善会大于规模增长:焦点

到现在,很多人对蝶城模式还是将信将疑的状态,它需要不断地通过验证、相信的过程。

大连万达10亿元中票将于3月28日开始回售 票面利率上调至6.60%_环球速看

本次投资人回售申请开始日为2023年3月28日,回售申请截止日为4月3日,行权日为4月12日。发行人计划将票面利率上调40BP,调整后票面利率为6 60%

苏州科技城发展集团3亿短期融资券即将兑付 利率2.90% 每日速讯

本期债券简称23苏科技城SCP003,发行金额为3亿元,债项利率2 90%,兑付日为2023年4月4日。

硬核科技论【Vol.28】宝马推出全景HUD,别出心裁还是多此一举?

只有一点我持保留意见,就是我觉得目前这个全景HUD,全景这俩字儿贯彻的还不够彻底,影像投射的面积确实不大,当然这套HUD离正式投产还有点时

宝马SUV车型47万左右推荐,看完这几款车再买不后悔!|焦点热讯

怀揣47万左右预算,想要购买一款宝马SUV47万左右,该如何选择呢?今天小编就根据众车网购车指数排行榜,为您精选了下面3款车型,快来看看有没

馈电百公里油耗低至4.3升,东风日产启辰DD-i超混动技术发布:每日观点

馈电百公里油耗低至4 3升,东风日产启辰DD-i超混动技术发布

今热点:5座中型SUV34万左右哪款好?耐用又实惠的车,这几款都值得看看

怀揣34万左右预算,想要购买一款5座中型SUV34万左右,该如何选择呢?今天小编就根据众车网购车指数排行榜,为您精选了下面5款车型,快来看看有

2022年末全省常住人口3481.35万:今日精选

2022年末全省常住人口3481 35万,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重点新闻网站

我省发布“文明祭扫平安清明”倡议书-当前要闻

我省发布“文明祭扫平安清明”倡议书,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重点新

专项资金保护濒危剧种今年将购买4250场演出给百姓_当前快讯

专项资金保护濒危剧种今年将购买4250场演出给百姓,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的

每日视点!31万左右大众7座SUV推荐,购车指数推荐,车主口碑助你选车!

手握31万左右,想购置一款31万左右大众7座SUV,市面上的车型那么多,到底如何买到适合自己的车型呢?首先需要从自身需求出发,找到自己购车的

复地集团5亿公司债将付年息 利率4.95%_世界今头条

观点网讯:3月28日,复地(集团)股份有限公司2021年面向专业投资者公开发行公司债券(第一期)2023年付息公告披露,本期债券将于2023年4月6日进

天天热消息:奥迪中大型车车型64万左右推荐,老司机帮你解决购车烦恼!

如果想买一款奥迪中大型车64万左右车型,很多人纠结怎么选择才不后悔,现在小编根据,众车网购车指数排行榜,推荐了4款车型,看完这几款车具体

为期13周!太原中院启动“反规避执行”助力营商环境提升|全球热闻

3月27日上午,太原市中院举行全市法院“反规避执行”助力营商环境建设专项活动动员大会。太原市委政法委副书记冯少华、市政府副秘书长李勇存出

33万左右的皮卡排行榜,大家最喜欢的车都在这儿!:当前速讯

在33万左右皮卡车型中,有不少的车型卖点很足,有的省油、有的空间大、还有些动力强。如果把产品力与价格放到一块对比,会发现这些车型的性价

我省开展制止餐饮浪费专项行动_热点在线

我省开展制止餐饮浪费专项行动,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重点新闻网站

985211大学是什么意思?985和211哪个级别高?

985211大学是什么意思211和985都是国家建设的大学工程。211大学是国家面向21世纪重点建设的100所高校,被称为211代码学校,所以简称是211大

2月环境空气质量大同最好获得奖励_天天微头条

2月环境空气质量大同最好获得奖励,主流媒体,山西门户。山西新闻网是经国务院新闻办审核批准,由山西日报报业集团主管、主办的山西省重点新闻网

复地集团5亿公司债将付年息 利率4.95%

本期债券简称21复地01,发行金额为5亿元,票面利率4 95%,将于2023年4月6日支付年息。

天天讯息:福建省金融部门设立稳岗扩岗专项贷款 单户授信额度最高3000万元

中国银行开通稳岗扩岗专项贷款便捷审批通道,为稳岗扩岗专项贷款企业提供人民币贷款,单户授信额度最高3000万元,给予原则上不超过4%的优惠贷

硬核科技论【Vol.28】宝马推出全景HUD,别出心裁还是多此一举?-天天快讯

只有一点我持保留意见,就是我觉得目前这个全景HUD,全景这俩字儿贯彻的还不够彻底,影像投射的面积确实不大,当然这套HUD离正式投产还有点时

天天简讯:北京首旅集团完成发行10亿中期票据 利率3.93%

债券简称23首旅MTN003,发行金额为10亿元,票面利率3 93%,发行期限为2+N年。

3月28日限售股解禁一览(名单)

3月28日,共有10家公司限售股解禁,合计解禁数量为2 60亿股,实际解禁市值为19 27亿元。

"18华润置地MTN002B4"将于4月4日兑付 债券余额为35亿元

本期债券简称18华润置地MTN002B4,代码101800340 IB,债券余额为人民币35亿元,本计息期债券利率为5 23%,单利计息,每年支付利息一次。付息及

新时代用户全能之选 红旗H6再展国产豪华新实力

岁末年初的广州车展上,不少汽车品牌纷纷亮相旗下重磅新产品。其中,红旗品牌B+级豪华风尚轿车——红旗H6,无疑是最为引人瞩目的新车型之一

坚持用户至上,拥抱新能源时代红旗品牌数字化转型看点十足

当下,各行各业都在争相推动数字化转型,期望以创新和前瞻,在这条赛道拔得头筹。汽车行业更是如此,各大品牌都在积极探索数字化转型。去年

从让理想飞扬,到梦想点亮未来,红旗品牌吹响新能源号角

新年肇始,万象更新。党的二十大胜利召开后,我国迎来了全面建成社会主义现代化强国,实现第二个百年奋斗目标新征程的新起点。在新格局与新

红旗H6亮相广州车展 改变B级轿车市场的创新之作

随着2022广州国际汽车展的开幕,不少汽车品牌都在本次车展中亮相了新款车型。其中,一汽红旗全球首发的全新B+级轿车红旗H6颇为引人注目。根

旗领风尚 红旗H6广州车展全球首发

12月30日,红旗H6全球首发仪式在2022广州国际汽车展现场盛大举行。中国第一汽车集团有限公司董事、党委副书记王国强出席仪式现场并致辞,向

邮局几点开门?邮局是事业单位还是企业单位?

邮局几点开门中国邮政行营业时间为周一到周五早晨9:00到下午5:00,周末营业时间是早晨10:00到下午4:00。邮局是事业单位还是企业单位邮政局

绿地是国企还是央企?绿地总部在哪个城市?

绿地是国企还是央企绿地集团不是国企也不是央企,它从改革之后目前是没有实际控制人的,即它是国有控股型企业。从股东上看,当前绿地集团主

国资委下属企业是什么编制?国资委下属企业有什么?

国资委下属企业是什么编制非事业编制 国资委下属企业属于普通企业员工,非事业编制。国资委下属企业有什么1、中国核工业集团公司2、中国核

百世快递电话是多少?百世快递是不是让极兔收购了?

百世快递电话是多少400-885-6561快运服务400-921-7766供应链服务百世快递是不是让极兔收购了是是。 百世集团将其在国内的快递业务以约68亿

知网是国企还是私企?知网总部在哪里?

知网是国企还是私企中国知网是私营企业,同方知网(北京)技术有限公司的公司类型为外国法人独资有限责任公司,是同方股份有限公司全资子公司,

绿地是国企还是央企?万科是国企还是央企?

绿地是国企还是央企绿地是国企。绿地一般指绿地控股集团有限公司,又称绿地集团,实质是国资控股的混合所有制上市公司。万科是国企还是央企万