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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

本篇主要介绍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!

目录
相关文章
|
24天前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
55 4
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
58 1
|
27天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
57 1
|
29天前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
27天前
|
Java 测试技术 API
软件测试中的自动化测试框架选择与应用##
在快速迭代的软件开发周期中,选择合适的自动化测试框架对于提高软件质量和开发效率至关重要。本文探讨了当前流行的几种自动化测试框架的特点和适用场景,旨在为软件开发团队提供决策依据。 ##
|
27天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
74 0
|
28天前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
38 0
|
29天前
|
机器学习/深度学习 人工智能 安全
探索AI在软件工程中的最新应用:自动化测试与代码审查
探索AI在软件工程中的最新应用:自动化测试与代码审查