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

购物网站建设需要公司营业执照吗那里有wordpress主题

购物网站建设需要公司营业执照吗,那里有wordpress主题,wordpress 区块链,网站蜘蛛抓取一、理解下ApplicationContext的设计 #xff08;一#xff09;功能性的理解 ApplicationContext 提供了一个轻量级、灵活、可扩展的容器#xff0c;能帮助我们更加轻松地构建和管理复杂的应用程序#xff0c;其通过依赖注入和控制反转等技术#xff0c;降低了组件之间的… 一、理解下ApplicationContext的设计 一功能性的理解 ApplicationContext 提供了一个轻量级、灵活、可扩展的容器能帮助我们更加轻松地构建和管理复杂的应用程序其通过依赖注入和控制反转等技术降低了组件之间的耦合度提高了代码的可维护性和可测试性同时还提供了丰富的功能和扩展点可以更加灵活地满足不同项目的需求。 从基本的官方网站 Spring | Home中来重新体会的话基本的功能性可以初步总结以下几点 Bean 实例化和管理创建、配置和管理应用程序中的 bean 实例可以根据配置文件或注解中的信息来实例化 bean并且负责处理 bean 之间的依赖关系。 依赖注入DI支持依赖注入即自动将 bean 之间的依赖关系注入到相应的属性中。可以通过构造函数、Setter 方法或字段注入的方式来实现依赖注入降低组件之间的耦合度。 控制反转IoC实现了控制反转即由容器负责管理组件的生命周期和依赖关系而不是由组件自己来管理。 AOP 支持提供了对面向切面编程AOP的支持可以在不修改原有代码的情况下通过切面来实现诸如日志记录、事务管理、安全性等与业务逻辑无关的功能。 事件传播提供了事件传播机制允许 bean 之间进行通信并且可以基于事件来触发特定的逻辑。使组件之间解耦更彻底同时也提高了应用程序的可扩展性和灵活性。 国际化支持支持国际化允许开发人员在应用程序中使用多种语言和地区的资源。提供了统一接口来访问国际化资源并且可根据用户的语言和地区设置动态加载相应的资源。 资源管理不仅管理 bean还管理应用程序中的其他资源如消息、国际化资源、文件等。它提供了统一的接口来访问这些资源并提供了便利的方法来加载和管理它们。 生命周期管理负责管理 bean 的生命周期包括实例化、初始化、销毁等过程。可以通过实现特定的接口或注解来定义 bean 的生命周期回调方法从而在 bean 的生命周期中执行特定的逻辑。 更多理解性的内容还是通过官方文档自行体会以上只是个人视角。 二ApplicationContext 结构类图 Spring Framework 中的 ApplicationContext 接口是 Spring 容器的核心接口之一它负责管理应用程序中的 bean 并提供了各种功能。除了 ApplicationContext 接口之外Spring 还提供了一些与其相关的子接口这些子接口通常根据具体的使用场景和需求来扩展 ApplicationContext 的功能。 在这个类图中 ApplicationContext 继承了 BeanFactory因此拥有 BeanFactory 的功能并增加了一些额外的特性。ApplicationContext 还实现了 ApplicationEventPublisher、ResourceLoader、MessageSource 和 EnvironmentCapable 接口提供了事件发布、资源加载、国际化消息处理和环境相关功能。ApplicationContext 中的属性包括父级 ApplicationContext、BeanFactory、事件发布器、资源加载器、消息源和环境对象。ApplicationContext 提供了访问这些属性的公共方法例如获取父级 ApplicationContext、获取 BeanFactory、发布事件、获取资源加载器、获取消息源和获取环境对象等。 本文后面会针对其重要的接口和子接口进行重新的学习和总结分享。 二、ApplicationContext根接口 一源码展示 展示ApplicationContext 接口的部分源码 public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourceLoader {// 获取父级 ApplicationContextNullableApplicationContext getParent();// 获取唯一 IDString getId();// 获取应用程序名称String getApplicationName();// 获取应用程序上下文显示名称String getDisplayName();// 获取启动时间long getStartupDate();// 获取所有 Bean 的名称String[] getBeanDefinitionNames();// 获取所有 Bean 的数量int getBeanDefinitionCount();// 检查是否包含指定名称的 Beanboolean containsBeanDefinition(String beanName);// 获取指定名称的 Bean 的类型NullableClass? getType(String name) throws NoSuchBeanDefinitionException;// 获取指定名称的 Bean 的别名String[] getAliases(String name);// 判断指定名称的 Bean 是否是单例boolean isSingleton(String name) throws NoSuchBeanDefinitionException;// 判断指定名称的 Bean 是否是原型boolean isPrototype(String name) throws NoSuchBeanDefinitionException;// 判断指定名称的 Bean 是否是当前上下文的 Beanboolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;// 判断指定名称的 Bean 是否是指定类型的 Beanboolean isTypeMatch(String name, Class? typeToMatch) throws NoSuchBeanDefinitionException;// 获取指定名称的 BeanNullableT T getBean(String name, Nullable ClassT requiredType) throws BeansException;// 获取指定名称的 BeanNullableObject getBean(String name) throws BeansException;// 获取指定类型的所有 BeanT MapString, T getBeansOfType(Nullable ClassT type) throws BeansException;// 获取指定类型的所有 Bean 的名称String[] getBeanNamesForType(Nullable Class? type);// 获取指定类型的所有 Bean 的名称包括非单例 BeanString[] getBeanNamesForType(Nullable Class? type, boolean includeNonSingletons, boolean allowEagerInit);// 获取所有监听指定事件类型的监听器T MapString, T getBeansOfType(Nullable ClassT type, boolean includeNonSingletons, boolean allowEagerInit)throws BeansException;// 获取指定类型的 Bean如果有多个符合条件的 Bean则抛出异常T T getRequiredBeanOfType(Nullable ClassT type) throws BeansException;// 获取指定类型的 Bean 的名称如果有多个符合条件的 Bean则抛出异常String[] getBeanNamesForType(Nullable ResolvableType type);// 获取指定类型的 Bean如果有多个符合条件的 Bean则抛出异常T MapString, T getBeansOfType(Nullable ResolvableType type) throws BeansException;// 获取指定类型的 Bean如果有多个符合条件的 Bean则抛出异常T T getBean(ClassT requiredType) throws BeansException;// 获取指定类型的 Bean 的名称如果有多个符合条件的 Bean则抛出异常String[] getBeanNamesForType(ResolvableType type);// 获取指定类型的 Bean如果有多个符合条件的 Bean则抛出异常T MapString, T getBeansOfType(ResolvableType type) throws BeansException;// 获取指定类型的 Bean如果有多个符合条件的 Bean则抛出异常T T getBeanProvider(ClassT requiredType) throws BeansException;// 是否是活跃的boolean isActive(); }可以从展示的部分直观的看到其定义了许多方法用于获取和操作 ApplicationContext 中的 bean。它继承了 EnvironmentCapable、ListableBeanFactory、HierarchicalBeanFactory、MessageSource、ApplicationEventPublisher 和 ResourceLoader 等接口提供了丰富的功能来管理应用程序中的 bean并且提供了许多便捷的方法来获取 bean 的信息。 二分析说明 ApplicationContext 是 Spring Framework 中的核心接口之一其提供了一种高级的容器机制用于管理应用程序中的组件。从上面的基本源码上我们可以提炼出以下的基本功能分析这里不做全面的深入因为还是太多了 Bean工厂方法 ApplicationContext 提供了丰富的方法来访问应用程序中的组件这些方法是从 ListableBeanFactory 接口继承而来的。通过这些方法可以方便地获取、检查和操作应用程序中的各种组件从而实现对应用程序的灵活管理和配置。 加载文件资源 ApplicationContext 通过实现 ResourceLoader 接口提供了一种通用的方式来加载文件资源。这些资源可以是位于类路径、文件系统、URL 等位置的文件通过统一的接口可以方便地进行加载和访问从而实现对应用程序资源的统一管理。 发布事件 通过实现 ApplicationEventPublisher 接口具备了发布事件的能力可以向注册的监听器发布事件消息从而实现组件之间的通信和解耦。 解析消息和国际化支持 ApplicationContext 实现了 MessageSource 接口支持消息的解析和国际化。通过 MessageSource可以方便地在应用程序中实现多语言支持根据不同的地区和语言加载相应的消息资源从而提高了应用程序的可用性和用户体验。 父子上下文继承 ApplicationContext 支持从父上下文继承子上下文中的定义优先级更高。意味着可以在整个应用程序中共享父上下文中的 bean同时每个子上下文可以拥有自己的 bean 定义实现更加灵活的应用程序结构。这种层级关系的管理机制使得应用程序更加模块化和可维护。 除了以上提到的功能外ApplicationContext 还具备对应用程序中的 bean 进行生命周期管理的能力同时可以检测和调用实现了 ApplicationContextAware、ResourceLoaderAware、ApplicationEventPublisherAware 和 MessageSourceAware 接口的 bean使得这些 bean 可以获取对 ApplicationContext、ResourceLoader、ApplicationEventPublisher 和 MessageSource 的引用并在运行时进行相应的操作和处理。 三、子接口ConfigurableApplicationContext 一源码展示 ConfigurableApplicationContext 是 ApplicationContext 接口重要的子接口它继承了 ApplicationContext 接口并添加了一些额外的配置功能。以下是 ConfigurableApplicationContext 接口的部分源码展示 public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {// 设置应用程序上下文的 IDvoid setId(String id);// 设置应用程序名称void setApplicationName(String applicationName);// 设置父级应用程序上下文void setParent(Nullable ApplicationContext parent);// 添加 BeanFactoryPostProcessor用于在 bean 工厂初始化之前对 bean 定义进行后置处理void addBeanFactoryPostProcessor(BeanFactoryPostProcessor postProcessor);// 注册一个关闭钩子用于在 JVM 关闭时关闭应用程序上下文void registerShutdownHook();// 刷新应用程序上下文启动容器并且在必要时触发 bean 工厂后置处理器和 bean 后置处理器的注册void refresh() throws BeansException, IllegalStateException;// 关闭应用程序上下文释放所有资源并触发 destroy 方法void close();// 销毁应用程序上下文释放所有资源Overridevoid destroy();// 获取环境信息OverrideConfigurableEnvironment getEnvironment(); }在这个接口中可以看到一些额外的配置功能例如设置应用程序上下文的 ID、应用程序名称、父级上下文等。另外还提供了添加 BeanFactoryPostProcessor、注册关闭钩子、刷新和关闭应用程序上下文等方法用于配置和管理应用程序上下文的生命周期。 注意的是ConfigurableApplicationContext 接口继承了 Lifecycle 和 Closeable 接口这意味着它具备了管理生命周期和关闭资源的能力。因此任何实现了 ConfigurableApplicationContext 接口的类都应该实现这些接口中定义的方法以确保应用程序上下文的正常运行和关闭。 二分析理解 ConfigurableApplicationContext 接口的设计旨在提供一种可配置的、可定制化的应用程序上下文以满足不同场景下的需求。具体理解可以从这几个方面展开 灵活的配置功能 ConfigurableApplicationContext 接口提供了一系列设置方法如 setId、setApplicationName、setParent 等用于对应用程序上下文进行配置。通过这些方法可以灵活地配置应用程序上下文的各种属性以满足不同应用场景下的需求。例如可以为应用程序上下文设置唯一的 ID、指定应用程序的名称、设置父级上下文等。 后置处理器的支持 ConfigurableApplicationContext 接口提供了添加 BeanFactoryPostProcessor 的方法 addBeanFactoryPostProcessor。这意味着在应用程序上下文刷新之前可以注册一个或多个 BeanFactoryPostProcessor用于在 bean 工厂初始化之前对 bean 定义进行后置处理。通过这种机制可以在容器启动之前对 bean 进行定制化的处理例如修改 bean 的定义、添加新的 bean 定义等。 生命周期管理 ConfigurableApplicationContext 继承了 Lifecycle 接口具备了管理生命周期的能力。它提供了刷新应用程序上下文的方法 refresh用于启动容器并且在必要时触发 bean 工厂后置处理器和 bean 后置处理器的注册。另外它还提供了关闭应用程序上下文的方法 close用于释放所有资源并触发 destroy 方法。通过这些方法可以对应用程序上下文的生命周期进行管理确保容器的正常运行和关闭。 环境配置 ConfigurableApplicationContext 提供了获取环境信息的方法 getEnvironment用于获取应用程序上下文的环境配置。通过环境信息可以方便地获取应用程序的配置属性例如配置文件中的属性、系统属性等为应用程序的配置和定制提供了更多的灵活性和可定制性。 四、深入理解几个父接口 ConfigurableApplicationContext 是 ApplicationContext 接口重要的子接口ApplicationContext本身还实现了几个父接口这些父接口共同组成了ApplicationContext扩展的几个核心特性。 一EnvironmentCapable EnvironmentCapable 接口的设计和实现旨在提供一种统一的方式来获取应用程序的环境配置信息以实现组件之间的解耦合、环境配置的一致性并且易于扩展和定制。 1.源码展示分析 EnvironmentCapable 接口定义了获取 Environment 对象的方法是 Spring Framework 中用于获取应用程序环境配置信息的核心接口之一。以下是 EnvironmentCapable 接口的部分源码展示 public interface EnvironmentCapable {// 获取应用程序环境对象Environment getEnvironment(); }在这个接口中只定义了一个方法 getEnvironment用于获取应用程序的环境对象。Environment 对象提供了访问应用程序配置属性、系统属性、环境变量等环境信息的方法使得应用程序可以方便地获取和管理这些配置信息。通过实现 EnvironmentCapable 接口并提供相应的实现可以使得应用程序具备了获取环境配置信息的能力从而可以根据不同的环境配置来调整应用程序的行为和功能。 2.理解其与ApplicationContext的关系 EnvironmentCapable 接口与 ApplicationContext 的关系在于 ApplicationContext 接口继承了 EnvironmentCapable 接口。这意味着任何实现了 ApplicationContext 接口的类都必须提供对环境配置信息的获取能力即实现了 getEnvironment 方法。 ApplicationContext 接口继承了 EnvironmentCapable 接口的原因在于Spring 应用程序上下文需要能够获取应用程序的环境配置信息以便于在运行时根据配置信息进行相应的操作和调整。环境配置信息可能包括应用程序的属性配置、系统属性、环境变量等。通过实现 EnvironmentCapable 接口ApplicationContext 接口承担了获取环境配置信息的责任使得应用程序上下文具备了对环境配置的统一访问能力。 EnvironmentCapable 接口与 ApplicationContext 的关系是一种接口继承关系它体现了 ApplicationContext 接口对环境配置信息的依赖和需求。通过这种关系ApplicationContext 可以通过 getEnvironment 方法获取环境配置信息从而实现了对环境配置的统一管理和访问。 3.简单的应用举例说明 我现在有个应用程序可能会根据不同的环境配置采取不同的行动。例如在开发环境中可能希望连接到本地数据库而在生产环境中可能希望连接到远程数据库。针对这样的需求我们就可以通过使用 EnvironmentCapable 接口和 ApplicationContext可以轻松地实现这种行为差异。 下面是一个简单的示例演示了如何在 Spring 应用程序中使用 EnvironmentCapable 接口和 ApplicationContext 来根据不同的环境配置加载不同的数据库连接信息 import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.core.env.Environment;public class DatabaseConfigExample {public static void main(String[] args) {// 根据不同的环境加载不同的配置类ApplicationContext context new AnnotationConfigApplicationContext(DatabaseConfig.class);// 获取 Environment 对象Environment environment context.getEnvironment();// 从环境中获取数据库连接信息String databaseUrl environment.getProperty(database.url);String databaseUsername environment.getProperty(database.username);String databasePassword environment.getProperty(database.password);// 连接到数据库System.out.println(Connecting to database:);System.out.println(URL: databaseUrl);System.out.println(Username: databaseUsername);System.out.println(Password: databasePassword);} }代码中定义了一个 DatabaseConfig 类它根据不同的环境加载不同的数据库连接配置。然后我们通过 ApplicationContext 获取到 Environment 对象从中获取数据库连接信息。通过这种方式可以根据不同的环境配置加载不同的数据库连接信息从而实现了环境配置的灵活管理。 在实际的应用程序中你可以将开发环境、测试环境和生产环境的配置信息分别存放在不同的配置文件中然后通过 Spring 的配置功能来加载相应的配置文件并根据需要获取相应的环境配置信息。这样就能够实现在不同环境下对应用程序的配置和行为进行灵活管理。 二MessageSource ApplicationContext 中通常会包含一个 MessageSource 对象用于解析和获取消息文本。通过 ApplicationContext 提供的方法可以方便地获取 MessageSource 对象并使用它来获取应用程序的国际化消息。这样就实现了 ApplicationContext 对国际化功能的支持和扩展。 1.源码展示分析 MessageSource 是 Spring Framework 提供的国际化支持接口用于解析和获取消息支持应用程序的多语言和国际化功能。以下是 MessageSource 接口的部分源码展示 public interface MessageSource {// 根据消息的代码和参数获取对应的消息文本String getMessage(String code, Nullable Object[] args, Nullable String defaultMessage, Locale locale) throws NoSuchMessageException;// 根据消息的代码和参数获取对应的消息文本如果找不到对应的消息则返回 nullNullableString getMessage(String code, Nullable Object[] args, Locale locale);// 根据消息的代码获取对应的消息文本如果找不到对应的消息则返回 nullNullableString getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException; }MessageSource 接口的设计和实现目的在于提供一种统一的方式来解析和获取消息文本以支持应用程序的多语言和国际化功能。通过调用 getMessage 方法并传入相应的参数可以根据消息的代码、参数和区域设置获取对应的消息文本从而实现应用程序的国际化支持。 2.理解应用举例说明 实现一个简单的控制器用于处理用户登录请求并返回相应的消息要求使用 MessageSource 接口来实现对登录成功和失败消息的国际化支持。 首先我们需要在 Spring 配置文件中配置 MessageSource bean并提供相应的消息资源文件如 messages.properties 和 messages_zh.properties。这些文件包含了登录成功和失败消息的文本分别对应不同的语言版本。 示例 messages.properties 文件内容如下 login.successLogin successful. login.errorLogin failed. Please check your username and password.示例 messages_zh.properties 文件内容如下 login.success登录成功。 login.error登录失败。请检查用户名和密码。事实上在 Spring 应用程序中ApplicationContext 是一个全局的容器它在应用程序启动时被加载并负责管理各个组件的生命周期和依赖关系。我们的控制器通常会被 Spring 容器管理而 ApplicationContext 会自动地注入到控制器中。按当前的需求简单实现代码如下 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody;import java.util.Locale;Controller public class LoginController {Autowiredprivate ApplicationContext applicationContext;PostMapping(/login)ResponseBodypublic String login(RequestParam(username) String username, RequestParam(password) String password) {// 假设这里进行了用户名和密码的验证boolean isAuthenticated authenticate(username, password);if (isAuthenticated) {// 获取当前请求的语言环境Locale locale LocaleContextHolder.getLocale();// 从 ApplicationContext 中获取 MessageSource 对象MessageSource messageSource applicationContext.getBean(MessageSource.class);// 获取登录成功消息String successMessage messageSource.getMessage(login.success, null, locale);return successMessage;} else {// 获取当前请求的语言环境Locale locale LocaleContextHolder.getLocale();// 从 ApplicationContext 中获取 MessageSource 对象MessageSource messageSource applicationContext.getBean(MessageSource.class);// 获取登录失败消息String errorMessage messageSource.getMessage(login.error, null, locale);return errorMessage;}}private boolean authenticate(String username, String password) {// 这里省略了用户名密码验证的逻辑简单返回 truereturn true;} }三ApplicationEventPublisher ApplicationContext 接口继承了 ApplicationEventPublisher 接口这意味着 ApplicationContext 具有发布事件的能力。在 Spring 应用程序中通常会使用 ApplicationContext 来发布事件以实现组件之间的解耦合和通信。 事件发布是 ApplicationContext 提供的一个重要功能它允许应用程序的各个组件在适当的时候发布自定义事件而不需要直接依赖于其他组件。通过事件驱动的方式可以实现应用程序的松耦合提高了代码的灵活性和可维护性。 除了作为事件发布器之外ApplicationContext 还可以作为事件监听器Event Listener的容器。在 Spring 应用程序中我们可以将事件监听器注册到 ApplicationContext 中然后 ApplicationContext 会自动将事件分发给注册的监听器从而实现对事件的监听和处理。 1.源码展示分析 ApplicationEventPublisher 接口是 Spring Framework 中用于发布事件的核心接口之一。以下是 ApplicationEventPublisher 接口的部分源码展示 public interface ApplicationEventPublisher {// 发布事件void publishEvent(ApplicationEvent event);// 发布事件给指定的监听器void publishEvent(Object event); }在这个接口中包含了两个发布事件的方法 publishEvent(ApplicationEvent event) 这个方法用于发布指定的应用程序事件。它接收一个 ApplicationEvent 对象作为参数表示要发布的事件。一般情况下我们会创建自定义的事件类继承自 ApplicationEvent然后通过这个方法来发布自定义事件。 publishEvent(Object event) 这个方法也用于发布事件但它接收一个任意类型的对象作为参数。Spring 会根据对象的类型来确定要发布的事件。如果对象是一个 ApplicationEvent 的子类那么 Spring 会将其视为一个应用程序事件并按照正常的方式进行处理。否则Spring 会将其包装成 PayloadApplicationEvent然后发布给监听器。 ApplicationEventPublisher 接口的设计和实现目的在于提供一种统一的方式来发布事件以实现应用程序中各个组件之间的解耦合。通过调用 publishEvent 方法可以将自定义事件发布给应用程序中的所有监听器从而实现事件驱动的编程模型。 2.Spring Framework 事件驱动核心组件 Spring Framework 的事件驱动核心可以划分为以下几个主要部分 事件Event 事件是 Spring Framework 中的核心概念之一代表着应用程序中发生的某个特定的动作或状态变化。事件通常被封装成一个 Java 类实现了 ApplicationEvent 接口或其子类。Spring 提供了 ApplicationEvent 接口以及一些预定义的事件类同时也支持开发者自定义事件类。 事件发布器Event Publisher 事件发布器是 Spring Framework 中用于发布事件的组件。在 Spring 中事件发布器由 ApplicationEventPublisher 接口来定义它通常由 ApplicationContext 实现。通过事件发布器应用程序可以将事件发布到应用程序上下文中以便监听器能够捕获并处理这些事件。 事件监听器Event Listener 事件监听器是 Spring Framework 中用于监听和处理事件的组件。在 Spring 中事件监听器由 ApplicationListener 接口来定义开发者可以实现这个接口来定义自己的事件监听器。事件监听器监听特定类型的事件当事件发生时监听器会被调用并执行相应的处理逻辑。 事件多播器Event Multicaster 事件多播器是 Spring Framework 中用于将事件分发给多个监听器的组件。在 Spring 中事件多播器由 ApplicationEventMulticaster 接口来定义通常由 AbstractApplicationContext 实现。它负责将事件传递给所有注册的监听器并确保它们按照特定的顺序进行调用。 事件源Event Source 事件源是指触发事件的对象或组件。在 Spring 中事件源通常是 ApplicationContext 或其他的 Spring Bean。当事件发生时事件源会将事件传递给事件多播器然后由多播器将事件分发给相应的监听器。 3. 四ResourcePatternResolver 五ResourcePatternResolver 四、 源码或官方文章 https://docs.spring.io/spring-framework/reference/core/beans/context-introduction.html Container Overview :: Spring Framework Spring Framework Documentation :: Spring Framework Java-based Container Configuration :: Spring Framework
http://www.zqtcl.cn/news/658466/

相关文章:

  • 做网站不会框架网站开发逻辑图
  • 东莞网站制作个性化宜都网站建设
  • 空壳网站查询网络服务提供者不履行法律、行政法规
  • 付费阅读网站代码做网站需要什么软件
  • 泗阳网站设计外贸网站特点
  • 国外logo设计网站推荐网页浏览器证书失效怎么修复
  • asp.net建立手机网站校园网站设计代码
  • 网站图标怎么下载肇庆新农村建设内容在哪个网站
  • 上海建站哪家好临沂建设工程质量 监督网站
  • 中国建设银行网站地图上海最新新闻热点事件
  • wordpress4.95淘宝优化标题都是用什么软件
  • 大网站用wordpress吗网站广告费怎么做分录
  • 江西建设安全网站会展平面设计主要做什么
  • 阿里巴巴免费做网站吗企业商务网站建设策划书
  • 广州网站制作哪家专业深圳网站制作开发
  • 网站icp备案管理系统个人网站源代码
  • 西安网站建设公司云网wordpress 文章分类
  • 长沙优化网站服务r18cn wordpress
  • 建材网站设计延安网站建设电话
  • 做视频网站犯法么华为公司网站建设案例分析
  • 陕煤化建设集团网站矿建二公司网站制作系统
  • 网站建设类别wordpress下载付费
  • 廊坊做网站的成都网站建设网站建设
  • 如何自己开网站网络服务检测与维护
  • 古镇网站建设熊掌号专业网站开发哪里有
  • 专业做网站服务上海网站开发哪家好
  • 科普重庆网站浙江网站开发
  • 怎么搭建自己的网站后台邹城网站建设哪家好
  • 二手房在哪个网站做合同wordpress 局域网 慢
  • 全包胶衣网站wordpress 3.1