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

winserverfrp可以做网站吗wordpress 文章的形式

winserverfrp可以做网站吗,wordpress 文章的形式,建站平台利弊,郑州免费网站建设哪家好首先#xff0c;让我大声说出来#xff1a; Spring不再是XML繁重的了 。 事实上#xff0c;如今#xff0c;您可以使用大量注释#xff0c; Java配置和Spring Boot来编写几乎没有XML或根本没有XML的Spring应用程序。 认真地停止谈论Spring和XML#xff0c;这已经成为过去… 首先让我大声说出来 Spring不再是XML繁重的了 。 事实上如今您可以使用大量注释 Java配置和Spring Boot来编写几乎没有XML或根本没有XML的Spring应用程序。 认真地停止谈论Spring和XML这已经成为过去。 话虽这么说您仍然可能出于以下几个原因而使用XML您受困于旧代码库出于其他原因选择了XML或者将Spring用作某些框架/平台的基础。 最后一种情况实际上很常见例如Mule ESB和ActiveMQ在下面使用Spring来连接它们的依赖项。 而且Spring XML是他们配置框架的方式。 但是使用纯Spring bean/配置消息代理或企业服务总线会很麻烦且冗长。 幸运的是Spring支持编写可嵌入标准Spring配置文件中的自定义名称空间 。 这些自定义的XML代码段在运行时进行了预处理并且可以以简洁令人愉悦的格式在XML允许的范围内一次注册许多bean定义。 从某种意义上说自定义名称空间就像在运行时扩展为多个bean定义的宏。 为了让您了解我们的目标请想象一个具有多个业务实体的标准“企业”应用程序。 对于每个实体我们定义三个几乎相同的bean存储库服务和控制器。 它们始终以相似的方式进行布线只是细节有所不同。 首先我们的Spring XML如下所示我正在粘贴带有缩略图的屏幕截图以免引起您的注意它巨大且huge肿 这是一个“分层的”架构因此我们将称为onion的自定义命名空间-因为洋葱具有层次性 -并且因为以这种方式设计的系统使我哭泣。 到本文结尾您将学习如何将这堆XML折叠为 ?xml version1.0 encodingUTF-8? b:beans xmlns:bhttp://www.springframework.org/schema/beansxmlnshttp://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsdxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsd http://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsdb:bean idconvertersFactory classcom.blogspot.nurkiewicz.onion.ConvertersFactory/converter formathtml/converter formatjson/converter formaterror lenientfalse/entity classFoo convertersjson, errorpage response404 destnot-found/page response503 desterror//entityentity classBar convertersjson, html, errorpage response400 destbad-request/page response500 destinternal//entityentity classBuzz convertersjson, htmlpage response502 destbad-gateway//entity/b:beans 仔细观察仍然是该框架可以完全理解的Spring XML文件-您将学习如何实现这一点。 您可以为每个顶级定制XML标记运行任意代码例如一次出现的entity/寄存器存储库服务和控制器Bean定义全部一次。 要实现的第一件事是为我们的名称空间编写自定义XML模式。 这并不难并且将允许IntelliJ IDEA以XML显示代码完成 ?xml version1.0 encodingUTF-8? schemaxmlns:tnshttp://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsdxmlnshttp://www.w3.org/2001/XMLSchematargetNamespacehttp://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsdelementFormDefaultqualifiedattributeFormDefaultunqualifiedelement nameentitycomplexTypesequenceelement namepage typetns:Page minOccurs0 maxOccursunbounded//sequenceattribute nameclass typestring userequired/attribute nameconverters typestring//complexType/elementcomplexType namePageattribute nameresponse typeint userequired/attribute namedest typestring userequired//complexTypeelement nameconvertercomplexTypeattribute nameformat typestring userequired/attribute namelenient typeboolean defaulttrue//complexType/element/schema模式完成后我们必须使用两个文件在Spring中进行注册 /META-INF/spring.schemas http\://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsd/com/blogspot/nurkiewicz/onion/ns/spring-onion.xsd/META-INF/spring.handlers http\://nurkiewicz.blogspot.com/spring/onion/spring-onion.xsdcom.blogspot.nurkiewicz.onion.ns.OnionNamespaceHandler一个将模式URL映射到本地的模式位置另一个则指向所谓的名称空间处理程序。 此类非常简单–它告诉如何处理来自Spring配置文件中遇到的该名称空间的每个顶级自定义XML标签 import org.springframework.beans.factory.xml.NamespaceHandlerSupport;public class OnionNamespaceHandler extends NamespaceHandlerSupport {public void init() {registerBeanDefinitionParser(entity, new EntityBeanDefinitionParser());registerBeanDefinitionParser(converter, new ConverterBeanDefinitionParser());} } 因此当Spring找到XML的converter formathtml/ 它知道需要使用我们的ConverterBeanDefinitionParser 。 请记住如果我们的自定义标签有子级例如entity/ 则仅对顶级标签调用bean定义解析器。 如何解析和处理儿童取决于我们自己。 好的因此假设单个converter/标记可以创建以下两个bean bean idhtmlConverter classcom.blogspot.nurkiewicz.onion.Converter factory-beanconvertersFactory factory-methodbuildconstructor-arg valuehtml.xml/constructor-arg valuetrue/property namereader refhtmlReader/ /bean bean idhtmlReader classcom.blogspot.nurkiewicz.onion.ReaderFactoryBeanproperty nameformat valuehtml/ /beanbean定义解析器的职责是以编程方式注册以XML定义的bean定义。 我不会详细介绍API但是将其与上面的XML代码段进行比较它们相互之间非常接近 import org.w3c.dom.Element;public class ConverterBeanDefinitionParser extends AbstractBeanDefinitionParser {Overrideprotected AbstractBeanDefinition parseInternal(Element converterElement, ParserContext parserContext) {final String format converterElement.getAttribute(format);final String lenientStr converterElement.getAttribute(lenient);final boolean lenient lenientStr ! null? Boolean.valueOf(lenientStr) : true;final BeanDefinitionRegistry registry parserContext.getRegistry();final AbstractBeanDefinition converterBeanDef converterBeanDef(format, lenient);registry.registerBeanDefinition(format Converter, converterBeanDef);final AbstractBeanDefinition readerBeanDef readerBeanDef(format);registry.registerBeanDefinition(format Reader, readerBeanDef);return null;}private AbstractBeanDefinition readerBeanDef(String format) {return BeanDefinitionBuilder.rootBeanDefinition(ReaderFactoryBean.class).addPropertyValue(format, format).getBeanDefinition();}private AbstractBeanDefinition converterBeanDef(String format, boolean lenient) {AbstractBeanDefinition converterBeanDef BeanDefinitionBuilder.rootBeanDefinition(Converter.class.getName()).addConstructorArgValue(format .xml).addConstructorArgValue(lenient).addPropertyReference(reader, format Reader).getBeanDefinition();converterBeanDef.setFactoryBeanName(convertersFactory);converterBeanDef.setFactoryMethodName(build);return converterBeanDef;} }您是否看到parseInternal()如何接收表示converter/标签的XML Element 提取属性并注册bean定义 由您决定在AbstractBeanDefinitionParser实现中定义多少个bean。 请记住我们在这里几乎没有构建配置还没有实例化。 一旦XML文件被完全解析并且所有bean定义解析器被触发Spring将开始引导我们的应用程序。 要记住的一件事是最后返回null 。 API期望您返回单个bean定义。 但是无需限制自己 null就可以了。 我们支持的第二个自定义标签是entity/ 它可以一次注册三个bean。 这很相似因此没那么有趣请参阅EntityBeanDefinitionParser完整源代码 。 可以找到的一个重要的实现细节是ManagedList的用法。 文档模糊地提到了它但是它非常有价值。 如果您想知道一个ID来定义要注入的bean列表那么简单的ListString是不够的您必须明确告诉Spring您的意思是一个bean引用列表 ListBeanMetadataElement converterRefs new ManagedList(); for (String converterName : converters) {converterRefs.add(new RuntimeBeanReference(converterName)); } return BeanDefinitionBuilder.rootBeanDefinition(com.blogspot.nurkiewicz.FooService).addPropertyValue(converters, converterRefs).getBeanDefinition();使用JAXB简化bean定义解析器 好的因此现在您应该熟悉自定义Spring命名空间以及它们如何为您提供帮助。 但是它们要求您使用原始XML DOM API解析自定义标签因此级别很低。 但是我的队友发现既然我们已经有了XSD模式文件为什么不使用JAXB来处理XML解析呢 首先我们要求Maven在构建过程中生成表示XML类型和元素的Java bean buildpluginsplugingroupIdorg.jvnet.jaxb2.maven2/groupIdartifactIdmaven-jaxb22-plugin/artifactIdversion0.8.3/versionexecutionsexecutionidxjc/idgoalsgoalgenerate/goal/goals/execution/executionsconfigurationschemaDirectorysrc/main/resources/com/blogspot/nurkiewicz/onion/ns/schemaDirectorygeneratePackagecom.blogspot.nurkiewicz.onion.ns.xml/generatePackage/configuration/plugin/plugins /build在/target/generated-sources/xjc您会发现几个Java文件。 我喜欢生成的JAXB模型具有一些通用前缀例如Xml 可以通过在spring-onion.xsd旁边放置自定义bindings.xjb文件轻松实现 bindings version1.0xmlnshttp://java.sun.com/xml/ns/jaxbxmlns:xshttp://www.w3.org/2001/XMLSchemaextensionBindingPrefixesxjcbindings schemaLocationspring-onion.xsd node/xs:schemaschemaBindingsnameXmlTransformtypeName prefixXml/anonymousTypeName prefixXml/elementName prefixXml//nameXmlTransform/schemaBindings/bindings/bindings它如何改变我们的自定义bean定义解析器 以前我们有这个 final String clazz entityElement.getAttribute(class); //... final NodeList pageNodes entityElement.getElementsByTagNameNS(NS, page); for (int i 0; i pageNodes.getLength(); i) { //...现在我们简单地遍历Java bean final XmlEntity entity JaxbHelper.unmarshal(entityElement); final String clazz entity.getClazz(); //... for (XmlPage page : entity.getPage()) { //...JaxbHelper只是一个简单的工具可从外部隐藏已检查的异常和JAXB机制 public class JaxbHelper {private static final Unmarshaller unmarshaller create();private static Unmarshaller create() {try {return JAXBContext.newInstance(com.blogspot.nurkiewicz.onion.ns.xml).createUnmarshaller();} catch (JAXBException e) {throw Throwables.propagate(e);}}public static T T unmarshal(Element elem) {try {return (T) unmarshaller.unmarshal(elem);} catch (JAXBException e) {throw Throwables.propagate(e);}}}几句话作为总结。 首先我不鼓励您为每个实体自动生成存储库/服务/控制器Bean定义。 实际上这是一个不好的做法但是我们所有人都熟悉该领域因此我认为这将是一个很好的例子。 其次更重要的是自定义XML名称空间是一个功能强大的工具当其他所有东西即抽象bean 工厂bean和Java配置失败时应将其用作最后的手段。 通常您会希望在Spring顶部构建的框架或工具中使用这种功能。 在这种情况下请在GitHub上查看完整的源代码 。 参考 Java和社区博客上的JCG合作伙伴 Tomasz Nurkiewicz的JAXB使自定义Spring命名空间变得更加容易 。 翻译自: https://www.javacodegeeks.com/2014/03/custom-spring-namespaces-made-easier-with-jaxb.html
http://www.yutouwan.com/news/250673/

相关文章:

  • 网站理念手机网站制作设计
  • 前几年做那个网站能致富wordpress 插件 图片上传
  • 六安市建设网站市场信息价网站开发开源软件
  • 定制网站需要多少钱网站建设济南云畅网络技术有限公司
  • 网站设计技术罗源县建设局网站
  • 合肥做网站做推广自己做网站帮别人卖东西
  • 如何免费做网站推广设计公司愿景
  • 泰安网站开发推广上海网站建设网
  • 网站制作换下面友情连接wordpress安装创建数据库文件
  • 国内网站不备案珠海公司做网站
  • 苏州做网站的公司wordpress frames
  • 整页图片广告网站源码网站建设汇报
  • 免费php企业网站页面seo是什么意思
  • 陕西省西安市制作网站新建网站百度搜不到
  • 网站 公众号信息化建设工作深圳外贸人才网
  • 廊坊企业建站网站专业术语中seo意思是
  • 多站点wordpress安装平面设计有什么网站
  • 传奇网页游戏下载金华关键词优化平台
  • 十堰网站建设怎么样六枝特区建设局网站
  • 网页设计制作个人网站网站做自己的超链接
  • 商务网站模块设计时前台基础设施建设表格制作教程从零开始
  • 物业公司网站模板wordpress媒体库配置
  • 网站上的动态图怎么做的一键生成器
  • asp.net网站开发与项目实战wordpress单页调用标题
  • 免费中学网站模板百度灰色关键词排名
  • 西安网页设计师培训班百度搜索引擎优化公司哪家强
  • 如何将视频添加到网站上北京企业建网站定制价格
  • 开发一个网站需要多久英文外贸网站制作
  • 网站开发有哪些技术专业做相册书的网站
  • 建设快卡额度查询网站深圳 网站托管