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

仿做唯品会网站电子版简历免费模板

仿做唯品会网站,电子版简历免费模板,网店运营策划书,增加网站备案spring 注释的作用Spring是一个永不停息的框架。 这是因为它提供了许多不同的解决方案#xff0c;使我们#xff08;开发人员#xff09;无需编写数百万行代码即可完成我们的任务。 取而代之的是#xff0c;我们能够以更具可读性#xff0c;更标准化的方式进行操作。 在这… spring 注释的作用 Spring是一个永不停息的框架。 这是因为它提供了许多不同的解决方案使我们开发人员无需编写数百万行代码即可完成我们的任务。 取而代之的是我们能够以更具可读性更标准化的方式进行操作。 在这篇文章中我将尝试描述最有可能为大家所熟知的功能之一但我认为其重要性被低估了。 我将要讨论的功能是Primary批注。 问题 在我从事的几个项目中我们遇到了一个常见的业务问题–我们有一个进入更复杂逻辑的入口–一些容器该容器会将其他几个处理器的结果收集到一个输出中例如map-filter-reduce函数编程中的函数。 在某种程度上它类似于Composite模式。 综上所述我们的方法如下 我们有一个容器其中包含自动实现共同接口的处理器列表 我们的容器实现了与自动装配列表元素相同的接口 我们希望使用该容器的客户端类使整个处理工作透明化-他只对结果感兴趣 处理器具有一些逻辑谓词处理器可将其应用于当前输入数据集 然后将处理结果合并到一个列表中然后缩减为单个输出 有很多方法可以解决此问题-我将介绍一种使用Spring和Primary批注的方法。 解决方案 让我们从定义我们的用例如何适应上述前提开始。 我们的数据集是一个Person类如下所示 人.java package com.blogspot.toomuchcoding.person.domain;public final class Person {private final String name;private final int age;private final boolean stupid;public Person(String name, int age, boolean stupid) {this.name name;this.age age;this.stupid stupid;}public String getName() {return name;}public int getAge() {return age;}public boolean isStupid() {return stupid;} } 没有什么不寻常的。 现在让我们定义合同 PersonProcessingService.java package com.blogspot.toomuchcoding.person.service;import com.blogspot.toomuchcoding.person.domain.Person;public interface PersonProcessingService {boolean isApplicableFor(Person person);String process(Person person); } 如前提条件中所述PersonProcessingService的每个实现都必须定义合同的两点 是否适用于当前人员 它如何处理一个人。 现在让我们看一下我们拥有的一些处理器-由于它毫无意义因此我不会在此处发布代码-您可以稍后在Github或Bitbucket上查看代码。 我们有以下Component注释的PersonProcessingService实现 AgePersonProcessingService 如果某人的年龄大于或等于18则适用 IntelligencePersonProcessingService 适用于某人是愚蠢的人 NamePersonProcessingService 如果某人有名字则适用 逻辑很简单。 现在我们的PersonProcessingServices容器将要针对处理器上的给定Person进行迭代检查当前处理器是否适用过滤器如果是这种情况则将响应处理Person的结果字符串添加到响应列表中映射–将Person转换为String的函数并最终以逗号将这些响应合并减少。 让我们检查一下它是如何完成的 PersonProcessingServiceContainer.java package com.blogspot.toomuchcoding.person.service;import java.util.ArrayList; import java.util.List;import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component;import com.blogspot.toomuchcoding.person.domain.Person;Component Primary class PersonProcessingServiceContainer implements PersonProcessingService {private static final Logger LOGGER LoggerFactory.getLogger(PersonProcessingServiceContainer.class);Autowiredprivate ListPersonProcessingService personProcessingServices new ArrayListPersonProcessingService();Overridepublic boolean isApplicableFor(Person person) {return person ! null;}Overridepublic String process(Person person) {ListString output new ArrayListString();for(PersonProcessingService personProcessingService : personProcessingServices){if(personProcessingService.isApplicableFor(person)){output.add(personProcessingService.process(person));}}String result StringUtils.join(output, ,);LOGGER.info(result);return result;}public ListPersonProcessingService getPersonProcessingServices() {return personProcessingServices;} } 如您所见我们有一个用Primary注释的容器这意味着如果必须注入PersonProcessingService的实现则Spring将选择要注入的PersonProcessingServiceContainer。 很棒的事情是我们有一个自动连接的PersonProcessingServices列表这意味着该接口的所有其他实现都将在那里自动连接容器不会自动将其自身连接到该列表。 现在让我们检查一下Spock测试 这些测试证明我没有在说谎。 如果您尚未在项目中使用Spock则应立即将其移动。 PersonProcessingServiceContainerIntegrationSpec.groovy package com.blogspot.toomuchcoding.person.service import com.blogspot.toomuchcoding.configuration.SpringConfiguration import com.blogspot.toomuchcoding.person.domain.Person import org.springframework.beans.factory.annotation.Autowired import org.springframework.test.context.ContextConfiguration import spock.lang.Specification import spock.lang.Unrollimport static org.hamcrest.CoreMatchers.notNullValueContextConfiguration(classes [SpringConfiguration]) class PersonProcessingServiceContainerIntegrationSpec extends Specification {AutowiredPersonProcessingService personProcessingServicedef should autowire container even though there are many implementations of service(){ expect: personProcessingService instanceof PersonProcessingServiceContainer}def the autowired container should not have itself in the list of autowired services(){ expect: personProcessingService instanceof PersonProcessingServiceContainerand:!(personProcessingService as PersonProcessingServiceContainer).personProcessingServices.findResult {it instanceof PersonProcessingServiceContainer}}def should not be applicable for processing if a person doesnt exist(){given:Person person nullexpect:!personProcessingService.isApplicableFor(person)}def should return an empty result for a person not applicable for anything(){given:Person person new Person(, 17, false)when:def result personProcessingService.process(person)then:result notNullValue()result.isEmpty()}Unroll(For name [#name], age [#age] and being stupid [#stupid] the result should contain keywords #keywords)def should perform different processing depending on input(){given:Person person new Person(name, age, stupid)when:def result personProcessingService.process(person) then:keywords.every {result.contains(it) }where:name | age | stupid || keywordsjan | 20 | true || [NAME, AGE, STUPID] | 20 | true || [AGE, STUPID] | 20 | false || [AGE]null | 17 | true || [STUPID]jan | 17 | true || [NAME]} } 测试非常简单 我们证明自动接线字段实际上是我们的容器– PersonProcessingServiceContainer。 然后我们证明在PersonProcessingService的自动装配实现的集合中找不到对象该对象属于PersonProcessingServiceContainer类型 在接下来的两个测试中我们证明处理器背后的逻辑正在运行 最后但并非最不重要的一点是Spock最出色的– where子句它使我们能够创建漂亮的参数化测试。 每个模块的功能 想象一下您在核心模块中定义了接口的实现的情况。 Component class CoreModuleClass implements SomeInterface { ... } 如果您在与核心模块有依赖性的其他模块中决定不想使用此CoreModuleClass并希望在SomeInterface自动连线的任何地方都具有一些自定义逻辑该怎么办 好吧–使用Primary Component Primary class CountryModuleClass implements SomeInterface { ... } 通过这种方式您可以确保必须自动装配SomeInterface的位置将是您的CountryModuleClass将其插入到该字段中。 结论 在这篇文章中您可以看到如何 使用Primary批注创建类似接口实现的复合容器 使用Primary批注提供接口的每个模块实现在自动装配方面该实现将优先于其他Components 编写出色的Spock测试:) 代码 您可以在Too Much Coding的Github存储库或Too Much Coding的Bitbucket存储库中找到此处提供的代码。 参考来自我们的JCG合作伙伴 Marcin Grzejszczak位于Blog上的 Spring Primary注释 适用于编码成瘾者博客。 翻译自: https://www.javacodegeeks.com/2013/12/springs-primary-annotation-in-action.htmlspring 注释的作用
http://www.pierceye.com/news/378512/

相关文章:

  • 网站建设如果登录失败男生和男生做污的视频网站
  • 备案ip 查询网站查询系统制作一个网站的成本
  • 微网站排版p9制作公司
  • 国产在线免费观看高甜电影推荐爱站网seo工具包
  • 建设银行官方网站首页入口建立网站如何推广
  • 网站登录界面图片用什么软件做wordpress qiniu
  • 设计素材网站好融资吗关键词排名怎么做好
  • 亚洲购物网站排名网站开发看掉一些功能
  • 网站开发 需求dnf盗号网站怎么做
  • 淘宝客免费网站建设宝塔搭建wordpress主机地址
  • 可以看网站的浏览器wordpress+博客+简书
  • 游戏源码网站免费网站模板有哪些内容
  • 江西网站优化广东网站设计有名的公司
  • wordpress整合dplayer关键词优化举例
  • wordpress怎么设置跳站外链接番禺网站建设培训学校
  • 怎样建立网站平台新网站应该怎么做
  • 根据颜色找网站济南做网站公司排名
  • 面对面视频 网站开发网络科技加我qq是干嘛
  • 如何登录网站制作平台百度旧版本
  • 广东营销型网站建设报价定制商品的app
  • 网站导航常用关键字电子商务网站设计内容
  • 建设vip网站相关视频wordpress 修改用户头像
  • 考百度指数 某个关键词在某个行业网站上的wordpress与Wix对比
  • 机器人网站建设规划书福州网站制作怎样
  • 自己创建一个网站需要多少钱2023最建议买10款手机
  • 寻找富阳网站建设国内个人网站欣赏
  • 企业自建站城市建设模拟游戏官方网站
  • 网站建设数据库类型建立网站信息发布登记制度
  • it培训机构都有哪些seo推广教程seo推广技巧
  • 龙岩网站开发较好的公司wordpress屏蔽首页