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

北京手机网站建设网络空间的三个特点包括哪些

北京手机网站建设,网络空间的三个特点包括哪些,网站建设类型报价表,推广方法有哪些技巧SpringBoot自动装配 在讲之前先了解一下#xff0c;手动装配的流程。 在没有Spring Boot的情况下#xff0c;你需要手动配置和添加相关依赖#xff0c;以实现类似于Spring Boot自动装配的功能。主要步骤#xff1a; 引入Spring相关依赖#xff1a; 首先#xff0c;你需…SpringBoot自动装配 在讲之前先了解一下手动装配的流程。 在没有Spring Boot的情况下你需要手动配置和添加相关依赖以实现类似于Spring Boot自动装配的功能。主要步骤 引入Spring相关依赖 首先你需要引入Spring框架的相关依赖包括核心容器spring-context、AOPspring-aop、数据访问spring-jdbc、spring-orm、事务管理spring-tx、Webspring-web等具体依赖根据项目需求而定。 !-- Spring Core Container -- dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.10.RELEASE/version !-- 请替换为最新版本 -- /dependency!-- Spring AOP -- dependencygroupIdorg.springframework/groupIdartifactIdspring-aop/artifactIdversion5.3.10.RELEASE/version /dependency!-- 其他Spring相关依赖... --手动配置Spring配置文件 在没有Spring Boot的情况下你需要手动创建Spring的配置文件例如XML配置文件来定义和配置Spring容器中的Bean、数据源、事务管理等。 !-- applicationContext.xml -- beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!-- 配置数据源、事务管理、其他Bean... --/beans手动扫描组件和配置类 Spring Boot自动扫描组件的特性在没有Spring Boot的情况下需要手动配置。你可以通过在配置文件中添加 context:component-scan 元素来启用组件扫描。 !-- applicationContext.xml -- beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdxmlns:contexthttp://www.springframework.org/schema/contextcontext:component-scan base-packagecom.example //beans手动配置Web应用如果有 如果你的项目是一个Web应用你需要手动配置Servlet、Filter、Listener等。 !-- web.xml -- web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion3.1!-- 配置Servlet、Filter、Listener等... --/web-app而在SpringBoot中你不需要写这一大堆的xml配置文件很多配置只需要通过Spring Boot 的全局配置文件 application.properties或application.yml进行修改比如更换端口号配置 JPA 属性等等。 优点因为Spring Boot提供了自动装配、默认配置和内嵌服务器等功能让你更专注于业务逻辑的开发而不用过多关心底层配置。 进入正题 什么是SpringBoot自动装配 Spring Boot 的自动装配Auto-Configuration原理是基于Spring Framework的条件化配置和EnableAutoConfiguration注解实现的。这种机制允许开发者在项目中引入相关的依赖Spring Boot 将根据这些依赖自动配置应用程序的上下文和功能。 SpringBoot 定义了一套接口规范这套规范规定SpringBoot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件将文件中配置的类型信息加载到 Spring 容器此处涉及到 JVM 类加载机制与 Spring 的容器知识并执行类中定义的各种操作。对于外部 jar 来说只需要按照 SpringBoot 定义的标准就能将自己的功能装置进 SpringBoot。 例如在SpringBoot项目中引入Redis只需要在Maven中引入一个Redis的starter dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId /dependency然后在配置文件中写下Redis的配置就可以调用Redis的服务这就是SpringBoot的强大之处 通俗来讲自动装配就是通过注解或一些简单的配置就可以在SpringBoot的帮助下开启和配置各种功能比如数据库访问、Web开发 SpringBoot自动装配原理 首先点进SpringBootApplication注解的内部 让我们逐个解释这些注解的作用 Target({ElementType.TYPE}): 该注解指定了这个注解可以用来标记在类上。在这个特定的例子中这表示该注解用于标记配置类。Retention(RetentionPolicy.RUNTIME): 这个注解指定了注解的生命周期即在运行时保留。这是因为 Spring Boot 在运行时扫描类路径上的注解来实现自动配置所以这里使用了 RUNTIME 保留策略。Documented: 该注解表示这个注解应该被包含在 Java 文档中。它是用于生成文档的标记使开发者能够看到这个注解的相关信息。Inherited: 这个注解指示一个被标注的类型是被继承的。在这个例子中它表明这个注解可以被继承如果一个类继承了带有这个注解的类它也会继承这个注解。SpringBootConfiguration: 这个注解表明这是一个 Spring Boot 配置类。如果点进这个注解内部会发现与标准的 Configuration 没啥区别只是为了表明这是一个专门用于 Spring Boot 的配置。EnableAutoConfiguration: 这个注解是 Spring Boot 自动装配的核心。它告诉 Spring Boot 启用自动配置机制根据项目的依赖和配置自动配置应用程序的上下文。通过这个注解Spring Boot 将尝试根据类路径上的依赖自动配置应用程序。ComponentScan: 这个注解用于配置组件扫描的规则。在这里它告诉 Spring Boot 在指定的包及其子包中查找组件这些组件包括被注解的类、Component 注解的类等。其中的 excludeFilters 参数用于指定排除哪些组件这里使用了两个自定义的过滤器分别是 TypeExcludeFilter 和 AutoConfigurationExcludeFilter。 看下来其实SpringBootApplication可以看作是Configuration、EnableAutoConfiguration、ComponentScan的组合 EnableAutoConfiguration 这个注解是实现自动装配的核心注解 AutoConfigurationPackage将项目src中main包下的所有组件注册到容器中例如标注了Component注解的类等等 Import({AutoConfigurationImportSelector.class})是自动装配的核心就来分析一下它 AutoConfigurationImportSelector AutoConfigurationImportSelector 是 Spring Boot 中一个重要的类它实现了 ImportSelector 接口用于实现自动配置的选择和导入。具体来说它通过分析项目的类路径和条件来决定应该导入哪些自动配置类。 代码太多选取部分主要功能的代码 public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware,ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {// ... 其他方法和属性// 获取所有符合条件的类的全限定类名例如RedisTemplate的全限定类名(org.springframework.data.redis.core.RedisTemplate;)这些类需要被加载到 IoC 容器中。Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {// 扫描类路径上的 META-INF/spring.factories 文件获取所有实现了 AutoConfiguration 接口的自动配置类ListString configurations getCandidateConfigurations(annotationMetadata, attributes);// 过滤掉不满足条件的自动配置类比如一些自动装配类configurations filter(configurations, annotationMetadata, attributes);// 排序自动配置类根据 AutoConfigureOrder 和 AutoConfigureAfter/AutoConfigureBefore 注解指定的顺序sort(configurations, annotationMetadata, attributes);// 将满足条件的自动配置类的类名数组返回这些类将被导入到应用程序上下文中return StringUtils.toStringArray(configurations);}// ... 其他方法protected ListString getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {// 获取自动配置类的候选列表从 META-INF/spring.factories 文件中读取// 通过类加载器加载所有候选类ListString configurations SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),getBeanClassLoader());// 过滤出实现了 AutoConfiguration 接口的自动配置类configurations configurations.stream().filter(this::isEnabled).collect(Collectors.toList());// 对于 Spring Boot 1.x 版本还需要添加 spring-boot-autoconfigure 包中的自动配置类// configurations.addAll(getAutoConfigEntry(getAutoConfigurationEntry(metadata)));return configurations;}// ... 其他方法protected ListString filter(ListString configurations, AnnotationMetadata metadata,AnnotationAttributes attributes) {// 使用条件判断机制过滤掉不满足条件的自动配置类configurations configurations.stream().filter(configuration - isConfigurationCandidate(configuration, metadata, attributes)).collect(Collectors.toList());return configurations;}// ... 其他方法protected void sort(ListString configurations, AnnotationMetadata metadata,AnnotationAttributes attributes) {// 根据 AutoConfigureOrder 和 AutoConfigureAfter/AutoConfigureBefore 注解指定的顺序对自动配置类进行排序configurations.sort((o1, o2) - {int i1 getAutoConfigurationOrder(o1, metadata, attributes);int i2 getAutoConfigurationOrder(o2, metadata, attributes);return Integer.compare(i1, i2);});}// ... 其他方法}梳理一下以下是 AutoConfigurationImportSelector 的主要工作 扫描类路径: 在应用程序启动时AutoConfigurationImportSelector 会扫描类路径上的 META-INF/spring.factories 文件这个文件中包含了各种 Spring 配置和扩展的定义。在这里它会查找所有实现了 AutoConfiguration 接口的类,具体的实现为getCandidateConfigurations方法。条件判断: 对于每一个发现的自动配置类AutoConfigurationImportSelector 会使用条件判断机制通常是通过 ConditionalOnXxx 注解来确定是否满足导入条件。这些条件可以是配置属性、类是否存在、Bean是否存在等等。 ​ 例如下面这个配置类,只有在RabbitTemplate.class, Channel.class存在才会去加载 Configuration // 检查相关的类RabbitTemplate 和 Channel是否存在 // 存在才会加载 ConditionalOnClass({ RabbitTemplate.class, Channel.class }) EnableConfigurationProperties(RabbitProperties.class) Import(RabbitAnnotationDrivenConfiguration.class) public class RabbitAutoConfiguration { }有兴趣的童鞋可以详细了解下 Spring Boot 提供的条件注解 ConditionalOnBean当容器里有指定 Bean 的条件下ConditionalOnMissingBean当容器里没有指定 Bean 的情况下ConditionalOnSingleCandidate当指定 Bean 在容器中只有一个或者虽然有多个但是指定首选 BeanConditionalOnClass当类路径下有指定类的条件下ConditionalOnMissingClass当类路径下没有指定类的条件下ConditionalOnProperty指定的属性是否有指定的值ConditionalOnResource类路径是否有指定的值ConditionalOnExpression基于 SpEL 表达式作为判断条件ConditionalOnJava基于 Java 版本作为判断条件ConditionalOnJndi在 JNDI 存在的条件下差在指定的位置ConditionalOnNotWebApplication当前项目不是 Web 项目的条件下ConditionalOnWebApplication当前项目是 Web 项 目的条件下 根据条件导入自动配置类: 满足条件的自动配置类将被导入到应用程序的上下文中。这意味着它们会被实例化并应用于应用程序的配置。 懂了上面这些我们其实可以自己实现一个Starter非常简单 自定义Starter 第一步创建threadpool-spring-boot-starter工程 第二步引入 Spring Boot 相关依赖 第三步创建ThreadPoolAutoConfiguration 第四步在threadpool-spring-boot-starter工程的 resources 包下创建META-INF/spring.factories文件 最后新建工程引入threadpool-spring-boot-starter 测试通过 总结 Spring Boot 通过EnableAutoConfiguration开启自动装配通过 SpringFactoriesLoader 最终加载META-INF/spring.factories中的自动配置类实现自动装配自动配置类其实就是通过Conditional按需加载的配置类想要其生效必须引入spring-boot-starter-xxx包实现起步依赖 希望这篇文章能够帮助你更好地理解SpringBoot自动装配Happy coding! 点个关注关注更多干货 参考链接https://javaguide.cn/system-design/framework/spring/spring-boot-auto-assembly-principles.html
http://www.zqtcl.cn/news/704060/

相关文章:

  • 木藕设计网站大全福州网络营销推广产品优化
  • 建设银行网上官方网站怎么批量修改wordpress文章内容
  • 多肉建设网站的目的及功能定位app网站开发成本
  • 如何保存网站上的图片不显示图片报纸网站建设
  • 网站营销的流程品牌推广方式有哪些
  • 网站开发的条件美术字设计
  • 网站可以自己做服务器么wordpress架站教程
  • 用ps怎么做网站导航条怎么做部署iis网站
  • 酒店 网站构建怎么创建自己的网址
  • 江苏推广网站建设业务个人工作室网站源码带后台
  • 色一把做最好的网站赤峰微信网站建设
  • 指定网站长期建设 运营计划网站淘宝客 没备案怎么做
  • 绵阳网站推广排名知名商业网站有哪些
  • 简要描述创建商务站点的商务天津建设工程合同备案网站
  • 做展示空间设计的网站wordpress调用作品分类
  • 网站怎么做访问量统计百度百科怎么创建自己
  • 泉州开发网站的公司有哪些网站页面相似度查询工具
  • 卖文章的网站源码咸阳做网站的公司电话
  • 网站建设案例百度云怎么在手机上传百度云wordpress
  • 传媒公司取名seo网站推广怎么收费
  • 网站建设具体详细过程WordPress usdt收款
  • 网站标题应怎设置生产备案号怎么查询网站
  • 怎样建立网站目录结构网站 项目方案
  • jsp做网站还响应式科技公司网站模板
  • 杭州网站建设设计公司做阀门网站
  • 用模板建站青岛企业网站制作公司
  • 网站建设经费预算表辽宁工程建设招标网
  • sql数据库查询网站模板谷歌浏览器网页版入口
  • 成都h5建站市场监督管理局举报电话
  • 百度推广弄个网站头像要钱吗?最新新闻热点素材