Spring系列篇--关于Spring Bean完整的生命周期【附有流程图,超级易懂】

15 篇文章 2 订阅
订阅专栏

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于Spring的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.Spring Bean是单例模式还是多例模式

 二.论证Bean是单例模式

代码论证单例模式的结果

简单JavaBean

spring-context.xml

测试类

结果

多例模式的对比结果

spring-context.xml

结果

三.使用单例模式的好处 

四. Spring Bean完整的生命周期 附流程图详细讲解


通过上两篇的讲解,相信大家已经对Spring十分了解了!!总的来说Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,我们只需要记住这一句话,便可以再脑海中会议起关于IOC和AOP的各个知识点啦!!在讲解Bean的生命周期之前,不妨先来讨论一个至关重要的问题:Bean到底是单例模式还是多例模式?

一.Spring Bean是单例模式还是多例模式

  • Bean 是一个 Java 框架,用于简化 Spring 应用程序中的 Bean 生命周期管理。
  • 在 Bean 中,Bean 实例被设计为单例模式,即在整个应用程序中,只有一个 Bean 实例被创建和共享。这种设计可以确保在应用程序中只有一个 Bean 实例被创建,从而避免了多实例之间的竞争和冲突。
  • 单例模式的设计可以带来很多好处
    • 1. 避免创建多个实例,从而减少了内存占用和资源消耗
    • 2. 确保在整个应用程序中只有一个 Bean 实例被创建,从而避免了多实例之间的竞争和冲突
    • 3. 可以方便地控制 Bean 的生命周期,例如在应用程序启动时创建 Bean 实例,在应用程序关闭时销毁 Bean 实例

通过上文的讲述,我们已经知道了Bean是单例模式,可是我们怎么去论证它说的是正确的呢?

 二.论证Bean是单例模式

  • 单例模式和区别
    • 单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。单例模式可以避免创建多个对象,提高代码的可维护性和可读性。在单例模式中,只有一个类被实例化,其他任何尝试实例化的代码都会返回同一个对象。
    • 多例模式则是一种不推荐的设计模式,它允许创建多个对象,这会导致代码的可维护性和可读性降低。在多例模式中,可以有多个类被实例化,并且这些实例之间没有任何关联。这种设计模式通常被滥用,会导致代码的可维护性变差

上面说了这么多,其实无非就是一句话:单例模式中确保一个类只有一个实例,而多例模式允许创建多个对象 如此而来,我们想要论证Bean究竟是不是单例模式就很好论证了,只需要证明在Bean中一个类只有一个实例就可以了,那么话不多说,我们直接上代码!!

代码论证单例模式的结果

简单JavaBean

package com.wh.beanlife;

import java.util.List;

public class ParamAction {
	private int age;
	private String name;
	private List<String> hobby;
	private int num = 1;
	// private UserBiz userBiz = new UserBizImpl1();

	public ParamAction() {
		super();
	}

	public ParamAction(int age, String name, List<String> hobby) {
		super();
		this.age = age;
		this.name = name;
		this.hobby = hobby;
	}

	public void execute() {
		// userBiz.upload();
		// userBiz = new UserBizImpl2();
		System.out.println("this.num=" + this.num++);
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.hobby);
	}
}

spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="paramAction" class="com.wh.beanlife.ParamAction">
        <constructor-arg name="name" value="昆昆"></constructor-arg>
        <constructor-arg name="age" value="25"></constructor-arg>
        <constructor-arg name="hobby">
            <list>
                <value>唱</value>
                <value>跳</value>
                <value>RAP</value>
            </list>
        </constructor-arg>
    </bean>

    <bean id="instanceFactory" class="com.wh.beanlife.InstanceFactory"
          init-method="init" destroy-method="destroy"></bean>

</beans>

测试类

package com.wh.beanlife;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/*
 * spring	bean的生命週期
 * spring	bean的單例多例
 */
public class Demo2 {
	// 体现单例与多例的区别
	@Test
	public void test1() {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring-context.xml");
//		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring-context.xml");
		ParamAction p1 = (ParamAction) applicationContext.getBean("paramAction");
		ParamAction p2 = (ParamAction) applicationContext.getBean("paramAction");
		// System.out.println(p1==p2);
		p1.execute();
		p2.execute();
		
//		单例时,容器销毁instanceFactory对象也销毁;多例时,容器销毁对象不一定销毁;
		applicationContext.close();
	}

	// 体现单例与多例的初始化的时间点 instanceFactory
	@Test
	public void test2() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/spring-context.xml");
	}

	// BeanFactory会初始化bean对象,但会根据不同的实现子类采取不同的初始化方式
	// 默认情况下bean的初始化,单例模式立马会执行,但是此时XmlBeanFactory作为子类,单例模式下容器创建,bean依赖没有初始化,只有要获取使用bean对象才进行初始化
	@Test
	public void test3() {
		// ClassPathXmlApplicationContext applicationContext = new
		// ClassPathXmlApplicationContext("/spring-context.xml");

		Resource resource = new ClassPathResource("/spring-context.xml");
		BeanFactory beanFactory = new XmlBeanFactory(resource);
//		InstanceFactory i1 = (InstanceFactory) beanFactory.getBean("instanceFactory");
		
	}

}

结果

 那如果是多例模式,会是什么样呢?

多例模式的对比结果

我们只需要修改spring-context.xml就能够看出区别了,在其中添加scope="prototype"就ok了

spring-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="paramAction" class="com.wh.beanlife.ParamAction" scope="prototype">
        <constructor-arg name="name" value="昆昆"></constructor-arg>
        <constructor-arg name="age" value="25"></constructor-arg>
        <constructor-arg name="hobby">
            <list>
                <value>唱</value>
                <value>跳</value>
                <value>RAP</value>
            </list>
        </constructor-arg>
    </bean>

    <bean id="instanceFactory" class="com.wh.beanlife.InstanceFactory"
          init-method="init" destroy-method="destroy"></bean>

</beans>

结果

三.使用单例模式的好处 

  1. 避免全局变量:全局变量可能导致命名冲突和不可预测的行为。使用单例模式可以避免全局变量,使得代码更加可维护和可测试
  2. 资源共享:如果多个类都使用了相同的资源,如数据库连接、日志记录等,使用单例模式可以避免创建多个实例,从而减少资源消耗
  3. 线程安全:单例模式保证了多线程环境下的线程安全,避免了多个实例同时访问共享资源的情况
  4. 方便管理:单例模式使得多个类可以共享一个实例,从而方便了管理和维护。例如,多个类都可以使用同一个日志记录器或配置管理器,从而减少了代码的耦合性

不妨讲个小例子,让大家更加明白使用单例模式的好处!

话说有一个家庭生了一对双胞胎崽崽,两个小男孩渐渐长大,他们一家一起去逛商场,两个小男孩都说很喜欢一款玩具小汽车,妈妈这时候犯难了,两个小孩都喜欢,可是他们一向都是三分钟热度,妈妈就觉得没必要买两个一样的玩具小汽车,就只买了一台。两个兄弟商量一人上午玩,一人下午玩。这样商量好之后,他们都觉得很不错。可到了真正玩了这个小汽车之后,下午玩这个小汽车的崽崽不开心了,就跑去跟妈妈说,“妈妈,我不想要下午玩这个小汽车,因为哥哥总是把小汽车搞得脏兮兮的😭😭”妈妈没办法,只好又买了一个小汽车给小崽崽,这样之后,两个崽崽都非常的满意的玩起了各自的小汽车!!

在上文的这个故事中,只买一个小汽车就对应着单例模式:确保一个类只有一个实例

而买了两个小汽车则对应着多例模式:允许创建多个对象

如此而来就能够理解它们两者的区别了吧,单例模式容易污染对象,就像文中大崽崽使用玩具车的时候将玩具车弄脏了,以至于小崽崽没有好的体验,但是单例模式可以节约内存,就想只买一个小汽车可以节约钱一样;多例模式不容易污染对象,文中买了两个小汽车就是这样的,两个崽崽都有各自的小汽车,不会出现各自都有不好的体验,但多例模式会比较占用内存,就像买两个小汽车需要多花钱一样

四. Spring Bean完整的生命周期 附流程图详细讲解

启动spring,就是创建beanFactory(bean工厂), 一般用的是beanFactory的子类applicationcontext, applicationcontext比一般的beanFactory要多很多功能,比如aop、事件等。  通过applicationcontext加载配置文件,或者利用注解的方式扫描将bean 的配置信息加载到spring容器里面

将加载的配置信息封装成BeanDefinition对象:加载之后,spring容器会将这些配置信息(java bean的信息),封装成BeanDefinition对象,BeanDefinition对象其实就是普通java对象之上再封装一层, 赋予一些spring框架需要用到的属性,比如是否单例,是否懒加载等等

BeanFactory:然后将这些BeanDefinition对象以key为beanName,值为BeanDefinition对象的形式存入到一个map里面,将这个map传入到spring beanfactory去进行springBean的实例化


BeanFactoryPostProcessor:传入到pring beanfactory之后,利用BeanFactoryPostProcessor接口这个扩展点去对BeanDefinition对象进行一些属性修改

Bean实例化:开始循环BeanDefinition对象进行springBean的实例化,springBean的实例化也就是执行bean的构造方法(单例的Bean放入单例池中,但是此刻还未初始化),在执行实例化的前后,可以通过InstantiationAwareBeanPostProcessor扩展点 (作用于所有bean)进行一些修改

Bean属性注入:spring bean实例化之后,就开始注入属性,首先注入自定义的属性,比如标注@autowrite的这些属性,再调用各种Aware接口扩展方法,注入属性(spring特有的属性),比如BeanNameAware.setBeanName,设置Bean的ID或者Name

初始化bean,对各项属性赋初始化值:初始化前后执行BeanPostProcessor(作用于所有bean)扩展点方法,对bean进行修改

      初始化前后除了BeanPostProcessor扩展点还有其他的扩展点,执行顺序如下:

        (1). 初始化前                       postProcessBeforeInitialization()
        (2). 执行构造方法之后                执行 @PostConstruct 的方法
        (3). 所有属性赋初始化值之后           afterPropertiesSet()
        (4). 初始化时                         配置文件中指定的 init-method 方法
        (5). 初始化后                       postProcessAfterInitialization()

        先执行BeanPostProcessor扩展点的前置方法postProcessBeforeInitialization(),
        再执行bean本身的构造方法
        再执行@PostConstruct标注的方法
        所有属性赋值完成之后执行afterPropertiesSet()
        然后执行 配置文件或注解中指定的 init-method 方法
        最后执行BeanPostProcessor扩展点的后置方法postProcessAfterInitialization()

Bean初始化完成:此时已完成bean的初始化,在程序中就可以通过spring容器拿到这些初始化好的bean

Bean随之而销毁: 随着容器销毁,springbean也会销毁,销毁前后也有一系列的扩展点。销毁bean之前,执行@PreDestroy 的方法销毁时,执行配置文件或注解中指定的 destroy-method 方法


结束: 以上就是spring bean的整个生命周期,下面再来个总结!!

          ①根据配置文件或注解信息,生成BeanDefinition,
          ②循环BeanDefinition去实例化

          ③注入属性

          ④初始化

          ⑤销毁,

          在这②③④⑤这几个阶段执行前后,spring框架提供了一系列的扩展点

关于Spring Bean声明周期的讲解,借鉴 http://t.csdn.cn/TifUQ了,大家也可以去看看这位大佬写的博文,超赞!

最后再附上一张图(结合上面的文字解释观看会更加爽!!)

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊    

马士兵Spring源码
kc7w91的博客
04-06 779
spring的事务是aop实现的,生成代理对象,然后走aop流程,不同的是通知是通过TransactionInterceptor的invoke方法实现的,执行具体的事务逻辑。问题:先创建A对象,填充A属性去找B实例,找不到B实例,尝试创建B实例,发现填充B的属性字段时需要A对象,A对象找不到,发生循环。到此步已经获得了普通对象,但是要考虑拓展性(做bean对象的扩展实现),(3)做准备前工作,(4)做代理。三级缓存的key是bean的名称,value是beanFactory(函数式接口)
详解SpringBean的生命周期和作用域及实现方式
08-31
主要给大家介绍了SpringBean的生命周期和作用域及实现方式的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
SpringBean的生命周期 2024-9-6 19:47
最新发布
2301_80011650的博客
09-06 800
Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。
springBean生命周期
zhangCheng的博客
12-18 2万+
一、springBean的生命周期 1、 启动spring容器,也就是创建beanFactory(bean工厂), 一般用的是beanFactory的子类applicationcontext, applicationcontext比一般的beanFactory要多很多功能,比如aop、事件等。 通过applicationcontext加载配置文件,或者利用注解的方式扫描将bean 的配置信息加载到spring容器里面。 2、 加载之后,spring容器会将这些
11 张流程图帮你搞定 Spring Bean 生命周期 (核心)
李虹柏的博客
10-16 586
在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近把整个流程化成了一个流程图。待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程。注意因为代码比较多,这里的流程图只画出了大概的流程,具体的可以深入代码。 一、获取Bean 第一阶段获取Bean 这里的流程图的入口在 AbstractBeanFactory类的 doGetBean方法,这里可以配合前面的 getBean方法分析文章进行阅读。主要流程就是 1、先处理Bean 的名称,因为如果以“&”开头的
SpringMVC的工作原理的解释和它的流程图
u011738183的专栏
11-06 1790
SpringMVC的工作原理的解释和它的流程图
spring bean生命周期
weixin_34192993的博客
10-08 179
2019独角兽企业重金招聘Python工程师标准>>> ...
Spring系列- - -spring bean生命周期
退役复学在校大学生,目光所至,皆为华夏
09-17 7293
再次渡入繁世,人潮汹涌,眼里茫然,信仰永恒,皆为华夏 目录Spring11、解释一下spring bean的生命周期12、解释Spring支持的几种bean的作用域? 本期分享到此为止,关注博主不迷路,叶秋学长带你上高速~~首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy;Spring上下文中的Bean生命周期也类似,如下:(1)实例化Bean:对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入
Spring Bean的生命周期 ---附详细流程图及测试代码
Kerwin的博客
09-24 1万+
一、生命周期流程图:   Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点 假设一个Bean实现了所有的接口,大的概况一下Bean的生命周期: 1.实例化BeanFactoryPostProcessor:处理的对象是BeanFactory级别 2.实例化BeanPostProcessor实现类 3.实例化I...
Spring Bean的生命周期(一流+详细说明)
马赛琦的博客
10-20 1万+
在我的博客阅读本文 1. 前言 Spring是一个IOC(Inversion of Control,控制反转)容器框架,拥有DI(Dependency Injection,依赖注入),DL(Dependency Lookup,依赖查找 等功能。 认为一个IOC框架最基本要有以下功能: 配置解析 对象创建 对象生命周期管理 本文基于Spring-5.2.2.RELEASE版本进行论述,为了简明扼要,在展示部分代码的时候省略了一些细节。 Spring Bean的生命周期总结因为没有一个正式的文档,因此是.
【面试大全-Spring】-Bean的生命周期
起而行动,方能平定心中的惶恐
12-31 6440
bean的生命周期就是一个创建bean的过程, 主要分为4个步骤,实例化,属性注入,初始化,销毁 springbean的生命周期主要是创建bean的过程,一个bean的生命周期主要是4个步骤,实例化,属性注入,初始化,销毁,但是对于一些复杂的bean的创建,spring会在bean的生命周期中开放很多的接口,可以让你加载bean的时候对bean做一些改变,因此springbean的生命周期总共有以下几步: 首先在spring中有一些特殊的bean会介入到其他bean的声明周期当中去,所以一个普通的be
SpringBean生命周期详解
weixin_43244698的博客
10-28 9602
SpringBean生命周期详解 一、简述: Spring是我们每天都在使用的框架,Bean是被Spring管理的Java对象,是Spring框架最重要的部分之一,那么让我们一起了解一下SpringBean的生命周期是怎样的吧 二、流程图 我们先从宏观的角度看一下Spring生命周期: ![在这里插入片描述](https://img-blog.csdnimg.cn/20201028174058916.png?x-oss-process=image/watermark,t ype_ZmFuZ3poZW5
Spring bean生命周期
izhuhf的专栏
02-22 138
在传统的Java应用中,Bean的生命周期非常简单。 Java的关键词new用来实例化Bean(或许他是非序列化的)。这样就够用了。 相反,Bean的生命周期Spring容器中更加细致。 理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程。 1.容器寻找Bean的定义信息并且将其实例化。 2.受用依赖注入,Spring按...
SpringBean的生命周期
MrBlackWhite的博客
07-02 523
智商捉鸡????,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以。。。决定拆成小的不能在小的一个个问题,一点点啃。今天先来看看SpringBean的生命周期Spring Bean是Spring应用中最最重要的部分了。所以来看看Spring容器在初始化一个bean的时候会做那些事情,顺序是怎样的,在容器关闭的时候,又会做哪些事情。 示例代码 spring版本:4.2.3.RELEASE 鉴于Spring源码是用gradle构建的,我也决定舍弃我...
Springbean的生命周期(最详细)
热门推荐
qq_35634181的博客
02-26 14万+
Spring Bean的生命周期Spring面试热点问题。Spring Bean的生命周期指的是从一个普通的Java类变成Bean的过程,深知Spring源码的人都知道这个给面试官讲的话大可讲30分钟以上,如果你不没有学习过Spring的源码,可能就知道Aware接口和调用init方法这样的生命周期,所以这个问题既考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。 首先你要明白一点,Sp
SpringBean的生命周期
笑忘哭的博客
12-03 188
什么是Bean的生命周期 Bean的生命周期指的是Bean创建→初始化→销毁的过程 我们可以自定义Bean初始化和销毁方法 容器在Bean进行到当前生命周期的时候,来调用自定义的初始化和销毁方法。 初始化与销毁——自定义方法 我们创建一个Bike类 public class Bike { public Bike() { System.out.println("Bike 构造方法"); ...
写文章

热门文章

  • 会议OA项目之会议审批(亮点功能:将审批人签名转换为电子手写签名图片) 21032
  • 【微信小程序开发】小程序微信用户授权登录(用户信息&手机号) 9992
  • 数据库的备份与恢复(超详细讲解) 8210
  • 开发工具Eclipse的使用之导入项目(import) 7689
  • Eclipse中的实用工具之Debug 7024

分类专栏

  • 实用工具与技巧 10篇
  • python 6篇
  • 技术分享 1篇
  • RabbitMQ 2篇
  • Docker 6篇
  • Spring Cloud 7篇
  • SpringBoot电商练手项目 5篇
  • OAuth2 2篇
  • MyBatis-Plus 3篇
  • Spring Boot 3篇
  • Spring Security 3篇
  • MySQL 2篇
  • swagger2 1篇
  • Git 2篇
  • Redis 3篇
  • linux 5篇
  • 小程序开发 6篇
  • vue 5篇
  • SPA项目 6篇
  • 框架 15篇
  • 设计模式
  • 产品经理 2篇
  • 会议OA 7篇
  • 感悟及分享 2篇
  • 前端 8篇
  • JAVA集合框架 4篇
  • JDK8新特性 3篇
  • 数据库 11篇
  • jsp自定义标签 4篇
  • 自定义mvc框架 3篇
  • LayUi 4篇
  • xml 3篇

最新评论

  • 实用工具JRebel & XRebel【2023】配置和使用的详解

    chris2000520: 不是应该下载amd64?

  • 【微信小程序开发】小程序微信用户授权登录(用户信息&手机号)

    普通网友: 互联网众包平台Yespmp,帮助项目实现落地。平台提供全方位的服务,包括IT项目开发、运营推广、创意设计、灵 活用工等多个领域。它为项目发包方和接包服务商提供了一个交流和合作的平台,帮助双方找到合适的合作伙伴, 解决项目管理中的各种痛点,如项目风险高、成本和进度控制困难等。同时,平台还提供项目监理、开发工具包、 虚拟课堂等支持,帮助项目从设计到开发再到运营的整个周期顺利实施。

  • 开发工具Eclipse的使用之导入项目(import)

    豆子cc: 权限不够怎么办

  • 什么是分库分表?如何分库分表?(附大厂分库分表实例)

    RisingMighty: 最大支持日订单 10倍的增长速度不该是3亿吗

  • 【微信小程序开发】小程序微信用户授权登录(用户信息&手机号)

    普通网友: 好文,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

最新文章

  • 从零开始学Python(五)面向对象
  • 【技术分享】使用nginx完成动静分离➕集成SpringSession➕集成sentinel➕集成seata
  • RabbitMQ 死信交换机的详述➕应用
2024年21篇
2023年127篇

目录

目录

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是辉辉啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家浙江大型主题商场美陈现价顺德人物玻璃钢雕塑图片广东玻璃钢人像雕塑天水景区玻璃钢雕塑多少钱揭阳玻璃钢花盆花器景观雕塑玻璃钢雕塑广安玻璃钢花盆加厚玻璃钢花盆制作江苏季节性商场美陈生产厂家玻璃钢人物雕塑报价表北京个性化玻璃钢雕塑销售厂家上海开业商场美陈售价太原欧式玻璃钢雕塑价位宁德玻璃钢海豚雕塑室内商场美陈批发价玻璃钢马雕塑广场园林玻璃钢抽象动物雕塑价格铜玻璃钢卡通雕塑小品玻璃钢雕塑厂怎么合作河南高质量玻璃钢雕塑销售厂家玻璃钢彩绘雕塑哪里有玻璃钢雕塑的品牌是什么宣武玻璃钢花盆梅州玻璃钢卡通雕塑摆件乌海玻璃钢雕塑订制价格佛山玻璃钢卡通雕塑设计英国玻璃钢人像雕塑厦门鞍山玻璃钢卡通雕塑江苏玻璃钢冰棒雕塑广场玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化