ByxContainer轻量级 IOC 容器

联合创作 · 2023-09-30 06:54

ByxContainer是一个轻量级IOC容器,具有以下特性:

  • 使用Json格式的配置文件,抛弃复杂冗长的xml语法
  • 支持构造函数注入、静态工厂注入、实例工厂注入、JavaBean属性注入、setter注入、条件注入
  • 支持根据id或类型获取容器中的对象
  • 支持灵活的对象创建方式的配置
  • 对象的延迟加载和单例

在项目中引入ByxContainer

  1. 添加maven仓库地址

    <repositories>
        <repository>
            <id>byx-maven-repo</id>
            <name>byx-maven-repo</name>
            <url>https://gitee.com/byx2000/maven-repo/raw/master/</url>
        </repository>
    </repositories>
  2. 添加maven依赖

    <dependencies>
        <dependency>
            <groupId>byx.container</groupId>
            <artifactId>ByxContainer</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

ByxContainer的配置文件

ByxContainer使用Json作为配置文件的格式。你可以将配置文件命名为任何名字,放在任何你喜欢的路径下。

ByxContainer配置文件的基本框架如下:

{
    "$schema": "http://byx2000.gitee.io/byxcontainer/schema/schema.json",
    "typeAlias":
    {
        
    },
    "components":
    {
        
    }
}
  • typeAlias用于配置类型别名
  • components用于声明容器中的所有组件
  • $schema键指定JSON的约束文件路径,使用约束文件可以在编辑JSON文件时启用自动完成、语法检查等功能。某些编辑器可能需要特殊设置才能支持JSON约束文件的识别

ByxContainer的所有组件都定义在components中。组件以键值对的形式写在components对象中,键就是组件的id,值就是组件的定义。

{
    "components":
    {
        "c1": ... // 组件c1的定义
        "c2": ... // 组件c2的定义
        "c3": ... // 组件c3的定义
        ...
    }
}

加载与使用ByxContainer

在应用程序的初始化代码中,按照以下方式加载配置文件,并初始化容器:

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("配置文件路径");
ContainerFactory factory = new JsonContainerFactory(inputStream);
Container container = factory.create();

容器初始化完成后,有两种方法来获取某个已注册的对象:

  • 通过注册时的id获取
    // 获取id为c的对象
    SomeType c = container.getObject("c");
  • 通过类型获取
    // 获取容器中类型为SomeType的对象
    SomeType c = container.getObject(SomeType.class);

在以下三种情况时,会抛出ByxContainerExceprion异常:

  • 指定id的对象不存在
  • 指定类型的对象不存在
  • 有多个指定类型的对象

更多使用说明请看软件文档:https://github.com/byx2000/ByxContainer

浏览 13
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报