PicoContainer(Ioc容器)在测试用例中的应用(二)

简介:

本篇主要介绍PicoContainer的一些主要特性,很简单、很容易,但是很有效。喜欢英文的盆友也可以移步官方介绍,但是有些代码在新版本并不好使,还需要自己研究=.=!。

依赖注入

PicoContainer支持很多种注入方式,比如构造器注入、setter注入、annotation注入等等很多了。我们常用的annotation注入和构造器注入就可以了。

1、annotation注入方式

public class TestRandomWriteAndRead extends TestWriteAndRead {
  @Inject
  protected Writer writer;
  @Inject
  protected Reader reader;
  
  //...
}

  //...
  public void startTest(){
    PicoContainer pico = new DefaultPicoContainer();   
    pico.addComponent(RandomReader.class);
    pico.addComponent(RandomWriter.class);
    pico.addComponent(TestRandomWriteAndRead.class);
    
    TestWriteAndRead readAndWrite = pico.getComponent(TestWriteAndRead.class);
  }
2、构造器注入
 
public class TestRandomWriteAndRead extends TestWriteAndRead {
  protected Writer writer;
  protected Reader reader;
  
  public TestRandomWriteAndRead (Reader reader, Writer writer){
    this.writer = writer;
    this.reader = reader;
  }
  
  //...
}

//startTest方法同上
需要注意的是以上两种方式都是按照类型匹配注入的,如果pico容器中含有相同的两个类型对象就会报错。当然也可以按照名称来匹配注入。看下面的例子,pico会按照我们定义的名字,自动把reader和writer匹配到 TestRandomWriteAndRead的构造函数中。
 
public class TestRandomWriteAndRead extends TestWriteAndRead {
  protected Writer writer;
  protected Reader reader;
  
  public TestRandomWriteAndRead (Reader reader, Writer writer){
    this.writer = writer;
    this.reader = reader;
  }
  
  //...
}

//...
public void startTest(){
  PicoContainer pico = new DefaultPicoContainer();   
  pico.addComponent("reader", RandomReader.class);
  pico.addComponent("writer", RandomWriter.class);
  pico.addComponent(TestWriteAndRead.class, TestRandomWriteAndRead.class,
      new ComponentParameter("reader"), new ComponentParameter("writer"));
  
  TestWriteAndRead readAndWrite = pico.getComponent(TestWriteAndRead.class);
}
单例模式
单例模式是我们常用的设计模式,在PicoContainer中用起来也非常简单,仅需要加入容器时标记一下即可,此时容器仅会初始化一个实例,并注入到需要他的地方。下面代码中 RandomReader就使用了单例模式。
 
public void startTest(){
  PicoContainer pico = new DefaultPicoContainer();   
  pico.as(CACHE).addComponent(RandomReader.class);
  pico.addComponent(RandomWriter.class);
  pico.addComponent(TestWriteAndRead.class);
  
  TestWriteAndRead readAndWrite = pico.getComponent(TestWriteAndRead.class);
}
生命周期
PicoContainer有自己的生命周期管理,仅需要实现Startable接口即可,此接口提供了start和stop方法。当调用pico.start();时,容器就会调用start方法开始运行这些实现的start方法,stop同理。这个很有意思,前面讲我们可以像搭积木一样,在用例中加入各个操作模块,然后使用start()命令触发各个模块的运作,让整个系统run起来。
 
public class TestRandomWriteAndRead extends TestWriteAndRead implements Startable {
  //...
  
  @Override
  public void start() {
    //...
  }

  @Override
  public void stop() {
  }
}
其他功能
比如Scoped功能可以在一个容器下面建立子容器,各不同类型的Container(我们前面用的都是DefaultPicoContainer),各种高级功能。如果有兴趣可以共同研究探讨,我觉得既然使用轻量级的Ioc容器以上这些基本功能大体已经够了。Enjoy it!

目录
相关文章
|
5月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
873 108
|
5月前
|
监控 安全 Shell
管道符在渗透测试与网络安全中的全面应用指南
管道符是渗透测试与网络安全中的关键工具,既可用于高效系统管理,也可能被攻击者利用实施命令注入、权限提升、数据外泄等攻击。本文全面解析管道符的基础原理、实战应用与防御策略,涵盖Windows与Linux系统差异、攻击技术示例及检测手段,帮助安全人员掌握其利用方式与防护措施,提升系统安全性。
227 6
|
5月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
3月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
3月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
4月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
549 11
|
6月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
406 59
|
6月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
330 1
|
5月前
|
机器学习/深度学习 存储 分布式计算
Java 大视界 --Java 大数据机器学习模型在金融风险压力测试中的应用与验证(211)
本文探讨了Java大数据与机器学习模型在金融风险压力测试中的创新应用。通过多源数据采集、模型构建与优化,结合随机森林、LSTM等算法,实现信用风险动态评估、市场极端场景模拟与操作风险预警。案例分析展示了花旗银行与蚂蚁集团的智能风控实践,验证了技术在提升风险识别效率与降低金融风险损失方面的显著成效。
|
5月前
|
人工智能 IDE 测试技术
Browser-Use在UI自动化测试中的应用
Browser-Use是一款浏览器自动化工具,具备视觉与HTML解析、多标签管理、操作记录与复现、自定义操作、自我纠正及并行执行等功能,助力AI智能体高效完成网页任务。
402 0