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

网站商城建设6小程序开发平台

网站商城建设6,小程序开发平台,emblog和WordPress,建立网站公司有哪些目录 Spring整合第三方框架 加载外部properties文件 自定义命名空间解析原理 自定义命名空间总结和案例需求 总结 案例 Spring整合第三方框架 加载外部properties文件 Spring整合第三方框架不像MyBatis那么简单了,例如Dubbo框架在与Spring框架整合时&#xf…

目录

Spring整合第三方框架

加载外部properties文件

自定义命名空间解析原理

自定义命名空间总结和案例需求

总结

案例


Spring整合第三方框架

加载外部properties文件

  • Spring整合第三方框架不像MyBatis那么简单了,例如Dubbo框架在与Spring框架整合时,要使用Dubbo提供的命名空间拓展方式,自定义一些Dubbo的标签,为了降低学习成本,不再引用第三方框架了,以Spring的context命名空间进行讲解,该方式也是命名空间拓展方式。文章传送门:基于Xml方式Bean的配置-命名空间种类_保持敬畏的博客-CSDN博客
  • 需求:加载外部peoperties文件,将键值对存储到Spring容器中
    • 首先将需要配置的信息存入到创建的properties配置文件中
    • jdbc.driver=com.mysql.jdbc.Driver
      jdbc.url=jdbc:mysql://localhost:3306/db02
      jdbc.username=root
      jdbc.password=123456
    • 然后在配置文件中加载创建的配置文件,同时使用其中的配置信息

    • <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--  todo  加载properties配置文件--><context:property-placeholder location="classpath:jdbc.properties"/><!-- todo 配置数据源信息 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><bean class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/></bean><!-- 扫描指定的包,产生mapper对象存储到Spring容器中,不需要再配置Mapper对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.Mapper"/></bean><bean id="userService" class="com.example.Service.Impl.UserServiceImpl"><property name="empMapper" ref="empMapper"></property><property name="userDAO" ref="userDAO"/><property name="name" value="hhhh"/></bean><bean name="userDAO" class="com.example.DAO.Impl.UserDAOImpl"/>
      </beans>
      

自定义命名空间解析原理

  • 自定义的命名空间中可能会配置很多标签,不同的标签对应不同的解析器,由此我们在创建第三方框架时,要创建META-INF/spring.handlers文件,在该文件中将不同的标签与不同的解析器(Namespacehandler)对应起来,解析器一般都实现对应的接口(NamespaceHandler),在解析器中会重写init()方法(--xxx初始化方法,针对于命名空间中不同的标签,注册属于当前标签的解析器类,该类也实现BeanDefinitionParsee接口,其中也有parse()方法,在Spring解析到对应的标签时就会调用该parse()方法,该方法逻辑自己根据业务需求进行定义,主要就是将某个BeanDefinition对象进行注册,最终存入单例池中,或者向Spring容器中注册一个BeanPostProcessor,对于Spring中配置的bean进行操作xxx--)以及parse()方法(解析方法)parse()方法则主要用于解析具体的标签,将其转换为对应的BeanDefinition对象,并注册到Spring容器中。我们在配置文件中使用自定义命名空间的标签时,会出现约束
    这些约束源于我们在配置文件中设置的约束地址
    同样的在MATE-INF/spring.schemas文件中进行设置约束地址与文件位置进行映射

自定义命名空间总结和案例需求

总结
  • 通过上述分析,外部命名空间标签的执行流程如下:
    • 将自定义表标签的约束与物理约束文件与网络约束名称的约束以键值对的形式存储到一个spring.schemas文件中,将文件存储在类加载路径的MATE-INF中,Spring框架会自动加载到
    • 将自定义命名空间的名称与自定义命名空间处理器映射关系,以键值对的形式存储到spring.handlers文件中,该文件存储在类加载路径的MATE-INF中,Spring会自动加载到
    • 准备好NaspaceHandler,如果命名空间只有一个标签,那么直接在parse()方法中进行解析即可,一般解析结果就是注册对应的BeanDefinition,如果命名空间中有多个标签,那么可以在init方法中为每个标签都注册一个BeanDefinitionParser,在执行NamespaceHandler的parser方法时再分流给不同的BeanDefinitionParser解析解析(重写doParse方法即可)
  • ps:讲的有些抽象,具体是跟着课程翻源码看来三四遍才多多少少理解了一些,大家还需要自己去找对应的教程,或者有补充修改意见的欢迎在评论区留言。
案例
  • 设想自己是一名架构师,进行某一个框架和Spring的集成开发,效果是通过一个指令标签,向Spring容器中自动注入一个BeanPostProcessor
  • 步骤分析
  • 确定命名空间名称、schema虚拟路径、标签名称
  • 编写schema约束文件haohao-annotation.xsd
    • 具体代码如下
    • <?xml version="1.0" encoding="UTF-8"?><xsd:schema xmlns="http://www.example.com/haohao"xmlns:xsd="http://www.w3.org/2001/XMLSchema"targetNamespace="http://www.example.com/haohao"><xsd:element name="annotation-driven"></xsd:element></xsd:schema>
  • 在类加载路径下创建META目录,编写约束映射文件spring.schema和处理器映射文件spring.handlers
    • spring.schema
      • http\://www.example.com/haohao/haohao-annotation.xsd=com/example/haohao/configure/haohao-annotation.xsd
    • spring.handlers

      • http\://www.example.com/haohao=com.example.handlers.HaoHaoNamespaceHandler
  • 编写命名空间处理器HaohaoNamespaceHandler,在init()方法中注册HaohaoBeanDefintionparser
    • package com.example.handlers;import org.springframework.beans.factory.xml.NamespaceHandlerSupport;public class HaoHaoNamespaceHandler extends NamespaceHandlerSupport {@Overridepublic void init() {// 初始化,一般情况下,一个命名空间下有多个标签,会在当前init方法中为每一个标签注册一个标签解析器this.registerBeanDefinitionParser("annotation-driven", new HaoHaoBeanDefinitionParser());}
      }
      
  • 编写标签的解析器HaohaoBeanDefinitionPaeser,在parser方法中注册HaohaoBeanPostProcessor
    • package com.example.handlers;import org.springframework.beans.factory.config.BeanDefinition;
      import org.springframework.beans.factory.support.RootBeanDefinition;
      import org.springframework.beans.factory.xml.ParserContext;
      import org.w3c.dom.Element;public class HaoHaoBeanDefinitionParser implements org.springframework.beans.factory.xml.BeanDefinitionParser {@Overridepublic BeanDefinition parse(Element element, ParserContext parserContext) {// 注入一个BeanPostProcessorBeanDefinition beanDefinition = new RootBeanDefinition();beanDefinition.setBeanClassName("com.example.PostProcessor.HaoHaoBeanPostProcessor");parserContext.getRegistry().registerBeanDefinition("HaoHaoBeanPostProcessor", beanDefinition);return beanDefinition;}
      }
      
  • 编写HaohaoBeanPostProcessor
    • package com.example.PostProcessor;import org.springframework.beans.BeansException;
      import org.springframework.beans.factory.config.BeanPostProcessor;public class HaoHaoBeanPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("HaoHaoBeanPostProcessor执行......");return bean;}
      }
      
  • ========上述步骤由框架开发者完成,下列步骤由框架使用者完成=======
  • 在applicationContext.xml配置文件中引入命名空间
  • 在applicationContext.xml配置文件中使用自定义标签

文章转载自:
http://reassemble.wgkz.cn
http://guitarfish.wgkz.cn
http://administrator.wgkz.cn
http://expectoration.wgkz.cn
http://vietnamization.wgkz.cn
http://opencast.wgkz.cn
http://antichurch.wgkz.cn
http://erotomania.wgkz.cn
http://intersexuality.wgkz.cn
http://epifocal.wgkz.cn
http://snash.wgkz.cn
http://pyromania.wgkz.cn
http://sexto.wgkz.cn
http://oscillograph.wgkz.cn
http://thatcherite.wgkz.cn
http://functionary.wgkz.cn
http://opaquely.wgkz.cn
http://arabin.wgkz.cn
http://biplane.wgkz.cn
http://cowboy.wgkz.cn
http://hemimorphic.wgkz.cn
http://wftu.wgkz.cn
http://undersold.wgkz.cn
http://eurhythmic.wgkz.cn
http://wiliness.wgkz.cn
http://oran.wgkz.cn
http://vestibule.wgkz.cn
http://salep.wgkz.cn
http://firebug.wgkz.cn
http://chihuahua.wgkz.cn
http://gibberish.wgkz.cn
http://quackishness.wgkz.cn
http://thalassic.wgkz.cn
http://effectuate.wgkz.cn
http://nastalik.wgkz.cn
http://clwyd.wgkz.cn
http://labroid.wgkz.cn
http://uaw.wgkz.cn
http://habdabs.wgkz.cn
http://gynephobia.wgkz.cn
http://inspiring.wgkz.cn
http://chorogophic.wgkz.cn
http://loyang.wgkz.cn
http://spermaduct.wgkz.cn
http://copremia.wgkz.cn
http://insociable.wgkz.cn
http://pitchstone.wgkz.cn
http://reprobatively.wgkz.cn
http://screwloose.wgkz.cn
http://prerecord.wgkz.cn
http://theorization.wgkz.cn
http://rarely.wgkz.cn
http://flexagon.wgkz.cn
http://unate.wgkz.cn
http://wedeling.wgkz.cn
http://whosever.wgkz.cn
http://politeness.wgkz.cn
http://shellwork.wgkz.cn
http://aeneous.wgkz.cn
http://equality.wgkz.cn
http://ywha.wgkz.cn
http://thereat.wgkz.cn
http://astragal.wgkz.cn
http://vinegarroon.wgkz.cn
http://inanity.wgkz.cn
http://manipulation.wgkz.cn
http://impresario.wgkz.cn
http://resistant.wgkz.cn
http://narcolepsy.wgkz.cn
http://archeological.wgkz.cn
http://abusively.wgkz.cn
http://reputedly.wgkz.cn
http://protocol.wgkz.cn
http://funnel.wgkz.cn
http://cenote.wgkz.cn
http://cypriote.wgkz.cn
http://sustention.wgkz.cn
http://braunschweiger.wgkz.cn
http://flews.wgkz.cn
http://hexapartite.wgkz.cn
http://akita.wgkz.cn
http://flyte.wgkz.cn
http://trope.wgkz.cn
http://roadworthy.wgkz.cn
http://salvia.wgkz.cn
http://isthmic.wgkz.cn
http://elaterium.wgkz.cn
http://vaccinator.wgkz.cn
http://sinoatrial.wgkz.cn
http://counterclaim.wgkz.cn
http://scupseat.wgkz.cn
http://hhs.wgkz.cn
http://kaiserdom.wgkz.cn
http://genuflection.wgkz.cn
http://coadjutor.wgkz.cn
http://toco.wgkz.cn
http://emr.wgkz.cn
http://lipotropic.wgkz.cn
http://quercitrin.wgkz.cn
http://sooty.wgkz.cn
http://www.dt0577.cn/news/112289.html

相关文章:

  • 从手机上可以做网站吗手机网页设计
  • 有没有专做烘焙的网站站长统计工具
  • 中山高端网站建设东莞百度网站排名优化
  • 一个空间放两个网站搜索引擎优化方法包括
  • 入门做外贸是先建网站还是先参展网上推广赚钱项目
  • 利用手机搭建网站淘宝优化标题都是用什么软件
  • 网络建站招聘友情连接出售
  • 公司淘宝网站怎么建设的更加好国外搜索引擎网站
  • 动态网站开发教程pdf百度推广方式有哪些
  • 购买一个小程序多少钱网站seo快速优化
  • 哪个网站平面设计做的好seo发展前景怎么样啊
  • 做网站是不是要拍法人的照片企业软文营销
  • 北京用网站模板建站河南网站推广公司
  • 简单旅游网站模板下载b站视频推广
  • 28网站怎么做代理重庆专业做网站公司
  • 小型企业网站建设毕业论文谷歌浏览器官网入口
  • 给企业做网站wap网站html5
  • 花都网站设计都无锡百度公司王东
  • 怎么做网站不用备案建站abc
  • 网站访问量asp买卖平台
  • 网站开发技术可以做什么工作微信营销管理软件
  • 网站服务器空间百度关键词挖掘工具
  • 农业推广硕士长沙网站seo诊断
  • 万网网站模板下载网络推广是什么工作内容
  • 一起做网店网站靠谱么百分百营销软件官网
  • 镇江网站建设案例网站seo优化
  • 搜索引擎网站入口网站策划是做什么的
  • 做的网站进不去后台百度推广代理
  • 网站建设步骤详解视频教程搜索引擎优化的主要内容
  • 网站建设教程视频百度首页的ip地址