当前位置: 首页 > news >正文

wordpress小说站30几岁的人想学做网站

wordpress小说站,30几岁的人想学做网站,网页制作初体验教案,搭建电商分销系统IOC概念和原理 IOC概念 IOC就是控制反射#xff0c;把对象创建和对象之间的调用过程#xff0c;交给Spring进行管理使用IOC的目的#xff1a;降低耦合度 IOC底层原理 xml解析、工厂模式、反射 图解#xff1a; 原始模式 耦合度太高了#xff0c;即当dao改了#xf…IOC概念和原理 IOC概念 IOC就是控制反射把对象创建和对象之间的调用过程交给Spring进行管理使用IOC的目的降低耦合度 IOC底层原理 xml解析、工厂模式、反射 图解 原始模式 耦合度太高了即当dao改了service也跟着要改 工厂模式 工厂模式目的使耦合度降低到最低限度降低service和dao之间的联系 IOC过程 IOCBeanFactory、ApplicationContext接口 IOC思想基于IOC容器完成IOC容器底层就是对象工厂本质上就是一个工厂 Spring提供IOC容器实现两种方式两个接口 BeanFactoryIOC容器基本实现是Spring内部的使用接口不提供开发人员进行使用 特点加载配置文件的时候不会创建对象在获取对象使用才去创建对象 即BeanFactory在加载spring配置文件的时候不会创建对象只有在获取对象要去使用的时候才会去创建对象 ApplicationContextBeanFactory接口的子接口提供更多更强大的功能一般由开发人员进行使用 特点加载配置文件的时候就会把在配置文件的对象进行创建 而ApplicationContext在加载spring配置文件的时候就会创建对象 ApplicationContext接口有实现类 FileSystemXmlApplicationContext这个实现类里面传入的是xml文件的磁盘位置比如D:/java/bean1.xml而ClassPathXmlApplicationContext这个实现类里面传入的是类路径即src下 IOC操作Bean管理 Bean管理指的是两个操作 Spring创建对象Spring注入属性 Bean管理操作有两种方式 基于xml配置文件方式实现基于注解方式实现 IOC操作Bean管理基于xml方式 基于xml方式创建对象 !--配置User类的对象的创建-- !-- id就是起个名字(别名)class中填入这个类的全路径 -- bean iduser classcom.zan.spring5.User/bean做法 在Spring配置文件中使用bean标签标签里面添加对应属性就可以实现对象创建 在bean标签中有很多属性常用属性 id属性唯一标识也相当于别名class属性类全路径即包名类名name属性跟id属性一样作为唯一标识但是用的很少name的区别就是可以使用特殊符号如/ 创建对象时候默认是执行类的无参构造器来完成对象的创建 因此如果类中没有无参构造器则会报错因为找不到 没有无参构造器报错 基于xml方式注入属性 DI依赖注入就是注入属性 使用set方法进行注入属性 原始方法以前的方法来注入属性 现用Spring来进行注入属性 创建类定义属性和对应的set方法 /*** 演示使用set方法进行注入属性*/ public class Book {//创建属性private String bname;private String bauthor;//创建属性对应的set方法注入public void setBname(String bname) {this.bname bname;}public void setBauthor(String bauthor) {this.bauthor bauthor;}//测试方法用来看是否注入成功public void testDemo() {System.out.println(bname : bauthor);} }在Spring的配置文件xml中配置对象创建配置属性注入 !--set方法注入属性-- bean idbook classcom.zan.spring5.Book!--在bean标签里面使用property用来完成属性的注入name类里面属性名称value注入的属性值--property namebname valueabc/propertyproperty namebauthor valuezan哥/property /bean测试结果 使用有参构造器注入属性 原始方法以前的方法来注入属性 现用Spring来进行注入属性 创建类定义属性创建属性对应的有参构造方法 package com.zan.spring5;/*** 使用有参构造器注入属性*/ public class Orders {private String oname;private String address;public Orders(String oname, String address) {this.oname oname;this.address address;}public void ordersTest() {System.out.println(oname : address);} }在Spring的配置文件xml中进行配置 !--用有参构造器注入属性-- bean idorder classcom.zan.spring5.Orders!-- constructor-arg nameoname value电脑/constructor-arg--constructor-arg nameaddress valueChina/constructor-argconstructor-arg index0 value电脑1/constructor-arg /bean这个可以使用name来表示属性的也可以用index来表示属性 使用index来代表属性 p名称空间注入了解 使用p名称空间注入可以简化基于xml配置方式 添加 p 名称空间在配置文件中 beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:phttp://www.springframework.org/schema/pxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbeans标签的头内容其实是xml的相关约束 进行属性注入在bean标签里面进行操作 bean idbook classcom.zan.spring5.Book p:bnameabcd p:bauthorZan大哥/bean基于xml方式注入属性其他类型属性 字面值 null值 !--设置一个null值空值-- property nameaddressnull/ /property属性值包含特殊符号 !--属性值中包含特殊符号如 解决方法 1. 将 进行转义即lt; gt;2. 把带特殊符号内容写到CDATA中 -- property nameaddressvalue![CDATA[南京]]/value /property这个格式快捷键 - CD 注入属性 - 外部bean 创建两个类service类和dao类在service中调用dao里面的方法 public class UserDaoImpl implements UserDao{Overridepublic void update() {System.out.println(dao update...........);} }public class UserService {//创建UserDao类型属性生成set方法private UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao userDao;}public void add() {System.out.println(service add..........);userDao.update();//创建UserDao对象 - 原始方式//UserDao userDao new UserDaoImpl();//userDao.update();} }在Spring配置文件中进行配置 !--1. service和dao对象创建-- bean iduserService classcom.zan.spring5.service.UserService!--注入userDao对象name类里面的属性名称ref创建的userDao对象里面bean标签的id值--property nameuserDao refuserDaoImpl/property /beanbean iduserDaoImpl classcom.zan.spring5.dao.UserDaoImpl/bean注入属性 - 内部bean 一对多关系部门和员工一个部分有多个员工一个员工属于一个部分部门是一员工是多 在实体类之间表示一对多关系员工表示所属部门使用对象类型属性进行表示 //部门类 public class Dept {private String dname;public void setDname(String dname) {this.dname dname;} } //员工类 public class Emp {private String ename;private String gender;//员工属于某一个部门使用对象形式表示private Dept dept;public void setDept(Dept dept) {this.dept dept;}public void setEname(String ename) {this.ename ename;}public void setGender(String gender) {this.gender gender;} }在spring配置文件中进行配置 !--内部bean-- bean idemp classcom.zan.spring5.bean.Emp!--先设置两个普通的属性--property nameename valuelucy/propertyproperty namegender value女/property!--设置对象类型属性--property namedeptbean iddept classcom.zan.spring5.bean.Deptproperty namedname value安保部/property/bean/property /bean注入属性 - 级联赋值 第一种写法 !--级联赋值--bean idemp classcom.zan.spring5.bean.Emp!--先设置两个普通的属性--property nameename valuelucy/propertyproperty namegender value女/property!--级联赋值--property namedept refdept/property/beanbean iddept classcom.zan.spring5.bean.Deptproperty namedname value财务部/property/bean第二种写法 首先要先给dept这个属性设置get方法 //生成dept的get方法 public Dept getDept() {return dept; } !--级联赋值--bean idemp classcom.zan.spring5.bean.Emp!--先设置两个普通的属性--property nameename valuelucy/propertyproperty namegender value女/property!--级联赋值--property namedept refdept/propertyproperty namedept.dname value教学部/property/beanbean iddept classcom.zan.spring5.bean.Dept/bean注入集合属性 注入数组类型、List集合类型、Map集合类型、Set集合类型属性 创建类定义数组、List、Map、Set类型属性生成对应的set方法 package com.zan.spring5.collectiontype;import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set;public class Stu {//1. 数组类型属性private String[] courses;//课程//2. List集合类型属性private ListString list;//3. Map集合类型属性private MapString, String map;//4. set集合类型属性private SetString sets;//学生所学多门课程private ListCourse courseList;public void setCourseList(ListCourse courseList) {this.courseList courseList;}public void setCourses(String[] courses) {this.courses courses;}public void setList(ListString list) {this.list list;}public void setMap(MapString, String map) {this.map map;}public void setSets(SetString sets) {this.sets sets;}//测试方法public void test() {System.out.println(Arrays.toString(courses));System.out.println(list);System.out.println(map);System.out.println(sets);System.out.println(courseList);} }在Spring配置文件xml中进行配置 !--集合类型属性的注入-- bean idstu classcom.zan.spring5.collectiontype.Stu!--数组类型属性注入--property namecoursesarrayvalueJava课程/valuevalueC课程/value/array/property!--list类型属性注入--property namelistlistvalue小三/valuevalue张三/value/list/property!--map类型属性注入--property namemapmapentry keyJAVA valuejava/entry keyJSP valuejsp//map/property!--set类型属性注入--property namesetssetvalueMySQL/valuevalueRedis/value/set/property数组类型可以用array标签也可以用list标签 细节问题 在集合里面设置对象类型值 !--创建多个course对象将course对象传过去即可-- bean idcourse1 classcom.zan.spring5.collectiontype.Courseproperty namecname valueSpring5框架课程/ /bean bean idcourse2 classcom.zan.spring5.collectiontype.Courseproperty namecname valueMyBatis框架课程/ /beanbean!--注入list集合类型值是对象--property namecourseListlistref beancourse1/ref beancourse2//list/property /bean把集合注入部分提取出来 a在Spring配置文件xml中引入名称空间util 在xml文件中的约束文件处引入名称空间util ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:utilhttp://www.springframework.org/schema/utilxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd /beansb使用util标签完成list集合注入提取 !--提取list集合类型属性的注入-- util:list idbookListvalueJava核心技术卷1/valuevalueJava核心技术卷2/valuevalueMySQL数据库/value /util:list!--提取list集合类型属性注入使用-- bean idbook classcom.zan.spring5.collectiontype.Bookproperty namelist refbookList/property /beanIOC操作Bean管理FactoryBean Spring有两种类型bean一种普通bean另外一种工厂beanFactoryBean 普通bean在配置文件中定义bean类型就是返回类型工厂bean在配置文件定义bean类型可以和返回类类型不一样 实现步骤 a创建类让这个类作为工厂bean即****实现接口FactoryBean b实现接口里面的方法在实现的方法中定义返回的bean类型 package com.zan.spring5.factorybean;import com.zan.spring5.collectiontype.Course; import org.springframework.beans.factory.FactoryBean;public class MyBean implements FactoryBeanCourse {//定义返回bean对象即返回类型Overridepublic Course getObject() throws Exception {Course course new Course();course.setCname(abc);return course;}Overridepublic Class? getObjectType() {return null;}Overridepublic boolean isSingleton() {return FactoryBean.super.isSingleton();} } bean idmyBean classcom.zan.spring5.factorybean.MyBean/bean注意这里的测试类的getBean里面获取的类应该是我们返回的类型即是Course不然会报类型不匹配错误 IOC操作Bean管理bean作用域 在Spring中我们可以设置bean示例是单实例或者多实例在Spring中默认情况下bean是单实例对象 单实例地址一样 多实例地址不一样 Test public void testBook() {ApplicationContext context new ClassPathXmlApplicationContext(bean2.xml);Book book1 context.getBean(book, Book.class);Book book2 context.getBean(book, Book.class);System.out.println(book1);System.out.println(book2);}设置单实例或多实例 在Spring配置文件中的bean标签里面有属性scope用于设置单实例还是多实例scope有两个值singleton单实例默认prototype多实例 !--提取list集合类型属性的注入-- util:list idbookListvalueJava核心技术卷1/valuevalueJava核心技术卷2/valuevalueMySQL数据库/value /util:list!--提取list集合类型属性注入使用-- bean idbook classcom.zan.spring5.collectiontype.Book scopeprototypeproperty namelist refbookList/property /beansingleton和prototype区别 singleton单实例prototype多实例设置scope值是singleton时测试文件在加载Spring配置文件的时候就会创建单实例对象因此这时的地址就已经确定之后创建的对象都是同一个地址 设置scope值是prototype时测试文件不是在加载Spring配置文件的时候创建对象而是在调用getBean方法的时候创建多实例对象 IOC操作Bean管理bean生命周期 生命周期从对象创建到对象销毁的过程 bean生命周期 通过构造器创建bean实例无参数构造器为bean的属性设置值和对其他bean的引用调用set方法调用bean的初始化的方法需要进行配置初始化的方法bean可以使用了对象获取到了当容器关闭的时候调用bean的销毁的方法需要进行配置销毁的方法 注意第三步初始化和第五步销毁都要自己额外配置 演示bean的生命周期 package com.zan.spring5.bean;public class Orders {private String oname;public Orders() {System.out.println(第一步 执行无参构造器创建bean实例);}public void setOname(String oname) {this.oname oname;System.out.println(第二步 调用set方法设置属性值);}//创建初始化的方法public void init() {System.out.println(第三步 调用初始化的方法);}//创建销毁的方法public void destroy() {System.out.println(第五步 调用销毁的方法);} }在bean标签中设置初始化init-method和销毁destory-method bean idorders classcom.zan.spring5.bean.Orders init-methodinit destroy-methoddestroyproperty nameoname value手机/property /bean测试方法 Test public void testBean3() {//ApplicationContext context new ClassPathXmlApplicationContext(bean4.xml);ClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(bean4.xml);Orders orders context.getBean(orders, Orders.class);System.out.println(第四步 获取创建bean实例对象);System.out.println(orders);//手动让bean销毁才会调用bean销毁的方法这个close是在ClassPathXmlApplicationContext这个实现类里面的//((ClassPathXmlApplicationContext)context).close();context.close(); }其实bean的生命周期还有两步即七步 bean的后置处理器 1通过构造器创建 bean 实例无参数构造 2为 bean 的属性设置值和对其他 bean 引用调用 set 方法 3把 bean 实例传递 bean 后置处理器的方法 postProcessBeforeInitialization 4调用 bean 的初始化的方法需要进行配置初始化的方法 5把 bean 实例传递 bean 后置处理器的方法 postProcessAfterInitialization 6bean 可以使用了对象获取到了 7当容器关闭时候调用 bean 的销毁的方法需要进行配置销毁的方法 即添加在初始化之前和初始化之后要想添加这两步需要有一个类去实现BeanPostProcessor接口 创建类实现接口BeanPostProcessor创建后置处理器 package com.zan.spring5.bean;import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor;public class MyBeanPost implements BeanPostProcessor {Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println(在初始化之前执行的方法);return bean;}Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println(在初始化之后执行的方法);return bean;} }配置后置处理器 !--配置后置处理器对当前的所有bean都添加后置处理器 -- bean idmyBeanPost classcom.zan.spring5.bean.MyBeanPost/beanIOC操作Bean管理xml自动装配【用的很少一般都用注解】 自动装配根据指定装配规则属性名称或者属性类型Spring自动将匹配的属性值进行注入【之前的指定name和value是手动装配】 package com.zan.spring5.autowire;public class Dept {Overridepublic String toString() {return Dept{};} } package com.zan.spring5.autowire;public class Emp {private Dept dept;public void setDept(Dept dept) {this.dept dept;}Overridepublic String toString() {return Emp{ dept dept };}public void test() {System.out.println(dept);} }根据属性名称自动注入 !--实现自动装配bean标签属性autowire配置自动装配autowire属性常用两个值byName根据属性名称注入注入的值bean的id的值要和类里面属性的名称一样byType根据属性的类型注入 -- bean idemp classcom.zan.spring5.autowire.Emp autowirebyName !-- property namedept refdept/property-- /bean bean iddept classcom.zan.spring5.autowire.Dept/bean根据属性类型自动注入 !--实现自动装配bean标签属性autowire配置自动装配autowire属性常用两个值byName根据属性名称注入注入的值bean的id的值要和类里面属性的名称一样byType根据属性的类型注入 -- bean idemp classcom.zan.spring5.autowire.Emp autowirebyType !-- property namedept refdept/property-- /bean bean iddept classcom.zan.spring5.autowire.Dept/bean注意用类型会不太好因为如果有两个类都是Dept类那么它将会不知道要使用哪个Dpet IOC操作Bean管理外部属性文件 直接配置数据库信息 配置德鲁伊连接池引入德鲁伊连接池依赖jar包 !--直接去配置连接池-- bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName valuecom.mysql.cj.jdbc.Driver/propertyproperty nameurl valuejdbc:mysql://localhost:3306/atguigu/propertyproperty nameusername valueroot/propertyproperty namepassword value123456/property /bean引入外部属性文件配置数据库连接池 创建外部属性文件properties格式文件写数据库信息 //properties的左边随便写只是别名 prop.driverClasscom.mysql.cj.jdbc.Driver prop.urljdbc:mysql://localhost:3306/atguigu prop.usernameroot prop.password123456把外部properties属性文件引入到Spring配置文件中 引入context名称空间 beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd在Spring配置文件使用标签引入外部属性文件 !--直接去配置连接池-- bean iddataSource classcom.alibaba.druid.pool.DruidDataSource!--property namedriverClassName valuecom.mysql.cj.jdbc.Driver/propertyproperty nameurl valuejdbc:mysql://localhost:3306/bjpowernode/propertyproperty nameusername valueroot/propertyproperty namepassword valueroot/property--property namedriverClassName value${prop.driverClass}/propertyproperty nameurl value${prop.url}/propertyproperty nameusername value${prop.username}/propertyproperty namepassword value${prop.password}/property /bean!--引入外部属性文件-- context:property-placeholder locationclasspath:jdbc.properties/IOC操作Bean管理基于注解方式 注解的基本介绍 注解是代码特殊标记格式注解名称属性名称属性值属性名称属性值使用注解注解作用在类上面方法上面属性上面使用注解目的简化xml配置 Spring针对Bean管理中创建对象提供注解 Component表示Spring容器中普通的组件Service一般用于业务逻辑层或者service层Controller一般用于外部层Repository一般用于dao层或者持久层 特点上面四个注解功能是一样的都可以用来创建bean实例没有什么区别只不过为了让开发更加规范 基于注解方式实现对象创建 引入依赖 - 在你的Spring文件中的lib文件中的spring-aop 开启组件扫描 前提引入名称空间context !--开启组件扫描1. 如果扫描多个包多个包使用逗号隔开2. 扫描那个包的上层目录 -- !-- context:component-scan base-packagecom.zan.spring5.dao, com.zan.spring5.service/context:component-scan -- context:component-scan base-packagecom.zan/context:component-scan创建类在类上面添加创建对象注解 //在注解里面的value属性值可以省略不写 //不写默认值是类名称把首字母小写 //即我们这里是UserService那默认就是userService Component(value userService)//里面是名字跟bean id class类似 id就是value public class UserService {public void add() {System.out.println(service add.........);} }因此通过注解我们在xml中只需要开启组件扫描就可以了 开启组件扫描细节配置 !--示例1use-default-filtersfalse表示现在不使用默认的filter使用自己配置的filtercontext:include-filter表示设置要扫描哪些内容示例1解释到com.zan中去扫描只带Controller的类 -- context:component-scan base-packagecom.zan use-default-filtersfalsecontext:include-filter typeannotation expressionorg.springframework.stereotype.Controller/ /context:component-scan!--示例2下面的配置是扫描包里的所有的内容context:exclude-filter设置哪些内容不去扫描解释到com.zan中扫描但不扫描带Controller的类 -- context:component-scan base-packagecom.zancontext:exclude-filter typeannotation expressionorg.springframework.stereotype.Controller/ /context:component-scan基于注解方式实现属性注入 Autowired根据属性类型进行自动装配 创建service和dao对象在service和dao类上添加对象注解在service注入dao对象在service类添加dao类型属性在属性上面使用注解 Component(value userDaoImpl1) public class UserDaoImpl implements UserDao{Overridepublic void add() {System.out.println(dao add............);} }//在注解里面的value属性值可以省略不写 //不写默认值是类名称把首字母小写 //即我们这里是UserService那默认就是userService Component(value userService)//里面是名字跟bean id class类似 id就是value public class UserService {//定义dao类型属性//不需要添加set方法因为在这里面已经封装了//只需要添加注入属性的注解就可以了Autowired //根据类型进行自动注入private UserDao userDao;public void add() {System.out.println(service add.........);userDao.add();} }Qualifier根据名称进行注入 注意这个Qualifier注解的使用需要和Autowired一起使用 package com.zan.spring5.service;import com.zan.spring5.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import javax.annotation.Resource;//在注解里面的value属性值可以省略不写 //不写默认值是类名称把首字母小写 //即我们这里是UserService那默认就是userService Component(value userService)//里面是名字跟bean id class类似 id就是value public class UserService {//定义dao类型属性//不需要添加set方法因为在这里面已经封装了//只需要添加注入属性的注解就可以了Autowired //根据类型进行自动注入Qualifier(value userDaoImpl1) //根据名称注入private UserDao userDao;public void add() {System.out.println(service add.........);userDao.add();} }注意dao类和service类的value必须一致 Resource可以根据类型注入也可以根据名称注入 // Resource //根据类型进行注入 Resource(name userDaoImpl1) //根据名称进行注入 private UserDao userDao2;注意注入Resource这个类是javax的扩展包中的annotation因此Spring官方建议我们用Autowired和Qualifier Value注入普通类型属性 Value(value abc) private String name;public void add() {System.out.println(service add.........); // userDao.add();userDao2.add();System.out.println(name); }完全注解开发纯注解开发 - 不需要xml配置文件 创建配置类用来替代xml配置文件 这个配置类里面不写东西相当于xml配置文件 package com.zan.spring5.config;import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration;Configuration //表示这个类作为配置类来替代xml配置文件 ComponentScan(basePackages {com.zan}) //表示xml中的开启组件扫描 public class SpringConfig {}测试 Test public void testService2() {//加载配置类ApplicationContext context new AnnotationConfigApplicationContext(SpringConfig.class);UserService userService context.getBean(userService, UserService.class);userService.add(); }
文章转载自:
http://www.morning.bhqlj.cn.gov.cn.bhqlj.cn
http://www.morning.tqqfj.cn.gov.cn.tqqfj.cn
http://www.morning.wmpw.cn.gov.cn.wmpw.cn
http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn
http://www.morning.rcbdn.cn.gov.cn.rcbdn.cn
http://www.morning.rnyhx.cn.gov.cn.rnyhx.cn
http://www.morning.bpp999.com.gov.cn.bpp999.com
http://www.morning.ydflc.cn.gov.cn.ydflc.cn
http://www.morning.npbkx.cn.gov.cn.npbkx.cn
http://www.morning.qnxzx.cn.gov.cn.qnxzx.cn
http://www.morning.zqmdn.cn.gov.cn.zqmdn.cn
http://www.morning.dlhxj.cn.gov.cn.dlhxj.cn
http://www.morning.wkmyt.cn.gov.cn.wkmyt.cn
http://www.morning.kysport1102.cn.gov.cn.kysport1102.cn
http://www.morning.pynzj.cn.gov.cn.pynzj.cn
http://www.morning.mczjq.cn.gov.cn.mczjq.cn
http://www.morning.xtyyg.cn.gov.cn.xtyyg.cn
http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn
http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn
http://www.morning.xysdy.cn.gov.cn.xysdy.cn
http://www.morning.hqjtp.cn.gov.cn.hqjtp.cn
http://www.morning.dfbeer.com.gov.cn.dfbeer.com
http://www.morning.ndzhl.cn.gov.cn.ndzhl.cn
http://www.morning.zqkr.cn.gov.cn.zqkr.cn
http://www.morning.qnbgh.cn.gov.cn.qnbgh.cn
http://www.morning.rjrh.cn.gov.cn.rjrh.cn
http://www.morning.wnhsw.cn.gov.cn.wnhsw.cn
http://www.morning.gycyt.cn.gov.cn.gycyt.cn
http://www.morning.dztp.cn.gov.cn.dztp.cn
http://www.morning.rgnp.cn.gov.cn.rgnp.cn
http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn
http://www.morning.tnkwj.cn.gov.cn.tnkwj.cn
http://www.morning.nzqqd.cn.gov.cn.nzqqd.cn
http://www.morning.qzsmz.cn.gov.cn.qzsmz.cn
http://www.morning.wdply.cn.gov.cn.wdply.cn
http://www.morning.hxpff.cn.gov.cn.hxpff.cn
http://www.morning.wpjst.cn.gov.cn.wpjst.cn
http://www.morning.rfpq.cn.gov.cn.rfpq.cn
http://www.morning.trqsm.cn.gov.cn.trqsm.cn
http://www.morning.hkysq.cn.gov.cn.hkysq.cn
http://www.morning.crkhd.cn.gov.cn.crkhd.cn
http://www.morning.jcypk.cn.gov.cn.jcypk.cn
http://www.morning.wrbnh.cn.gov.cn.wrbnh.cn
http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn
http://www.morning.zcxjg.cn.gov.cn.zcxjg.cn
http://www.morning.fbxdp.cn.gov.cn.fbxdp.cn
http://www.morning.rkqqf.cn.gov.cn.rkqqf.cn
http://www.morning.ltrz.cn.gov.cn.ltrz.cn
http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn
http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn
http://www.morning.tkyxl.cn.gov.cn.tkyxl.cn
http://www.morning.fgtls.cn.gov.cn.fgtls.cn
http://www.morning.horihe.com.gov.cn.horihe.com
http://www.morning.jlnlr.cn.gov.cn.jlnlr.cn
http://www.morning.pqqhl.cn.gov.cn.pqqhl.cn
http://www.morning.hbdqf.cn.gov.cn.hbdqf.cn
http://www.morning.tgfjm.cn.gov.cn.tgfjm.cn
http://www.morning.grpfj.cn.gov.cn.grpfj.cn
http://www.morning.kfldw.cn.gov.cn.kfldw.cn
http://www.morning.gryzk.cn.gov.cn.gryzk.cn
http://www.morning.wzyfk.cn.gov.cn.wzyfk.cn
http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn
http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn
http://www.morning.zfgh.cn.gov.cn.zfgh.cn
http://www.morning.lpzyq.cn.gov.cn.lpzyq.cn
http://www.morning.dshkp.cn.gov.cn.dshkp.cn
http://www.morning.yksf.cn.gov.cn.yksf.cn
http://www.morning.jmmzt.cn.gov.cn.jmmzt.cn
http://www.morning.nkyc.cn.gov.cn.nkyc.cn
http://www.morning.wbqt.cn.gov.cn.wbqt.cn
http://www.morning.kkysz.cn.gov.cn.kkysz.cn
http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn
http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn
http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn
http://www.morning.sgqw.cn.gov.cn.sgqw.cn
http://www.morning.qkqpy.cn.gov.cn.qkqpy.cn
http://www.morning.blbys.cn.gov.cn.blbys.cn
http://www.morning.kndt.cn.gov.cn.kndt.cn
http://www.morning.kxryg.cn.gov.cn.kxryg.cn
http://www.morning.kqxng.cn.gov.cn.kqxng.cn
http://www.tj-hxxt.cn/news/247290.html

相关文章:

  • 特产电商网站建设报价单短网址生成条形码
  • 公司做网站那家好企业软件
  • 公司的 SEO与网站建设温州网站建设咨询
  • 三亚中国检科院生物安全中心门户网站建设临沂法律网站开发公司
  • 有没有教做帽子的网站自己怎么做wap网站
  • 做网站不想用微软雅黑了重庆辣肠怎么制作
  • 太原站建设有多长时间保定聊城网站建设
  • 1微信网站怎么建设企业网站关键字优化
  • 百度网站建设前期都有哪些费用阳江百姓网
  • 电子商务网站建设的方法及流程图泰安市住房与城乡建设局网站
  • 网站风格抄袭政务版企业微信app下载安装
  • 宁波网站优化平台设计前沿的网站
  • 浙江网站优化公司网站用php做的吗
  • 网站建设环保wordpress邮箱qq接入
  • 国内老牌的网站制作线上编程培训机构哪家好
  • 技术馆网站建设网站制作多少费用
  • 知名的中文域名网站有哪些教育培训公司
  • 谷歌google浏览器柳州seo公司
  • 160 国际英文网站wordpress分页diam
  • 优质聊城做网站费用商城网站系
  • 威海市做网站的销售推广的方法都有哪些
  • 网站开发 混合式 数据库网上全网推广
  • 树莓派做博客网站深圳网站建设与网站制作
  • 做网站有维护费是什么费用开发网站和application
  • 网站 廉政建设 板块购物网站的开发
  • 小学网站建设方案淄博网站制作高端营销
  • 哪些网站是jsp做的wordpress点赞打赏
  • asp做的网站js网站开发工具
  • 四线城市做网站建设怎么样哪儿有网络推广培训
  • 济南网站制作报价中博建设集团有限公司网站