# ByxContainer
**Repository Path**: byx2000/ByxContainer
## Basic Information
- **Project Name**: ByxContainer
- **Description**: Simple IOC container.(轻量级IOC框架)
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2021-02-08
- **Last Updated**: 2021-08-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ByxContainer——轻量级IOC容器
ByxContainer是一个基于JSON配置文件的轻量级IOC容器,具有以下特性:
* 使用Json格式的配置文件,抛弃复杂冗长的xml语法
* 支持构造函数注入、静态工厂注入、实例工厂注入、JavaBean属性注入、setter注入、条件注入
* 支持灵活的对象创建方式的配置
* 支持简单的循环依赖处理
* 支持对象的延迟加载和单例
基于注解的轻量级IOC容器:[ByxContainerAnnotation](https://github.com/byx2000/byx-container-annotation)
## Maven引入
```xml
byx-maven-repo
byx-maven-repo
https://gitee.com/byx2000/maven-repo/raw/master/
byx.container
ByxContainer
1.0.0
```
## API文档
[API文档](http://byx2000.gitee.io/javadoc/ByxContainer-1.0.0-javadoc/)
## 使用示例
下面通过一个简单的使用示例来快速了解ByxContainer的使用。
1. 在`example`包下新建一个`Student`类:
```java
package example;
public class Student
{
private int id;
private String name;
private int age;
private double score;
public Student() {}
public Student(int id, String name)
{
this.id = id;
this.name = name;
}
public void setId(int id) { this.id = id; }
public int getId() { return id; }
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void setAge(int age) { this.age = age; }
public int getAge() { return age; }
public void setScore(double score) { this.score = score; }
public double getScore() { return score; }
@Override
public String toString()
{
return "Student{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + ", score=" + score + '}';
}
}
```
2. 在`resources`目录下新建一个`container.json`,并写入如下内容:
```json
{
"$schema": "http://byx2000.gitee.io/byxcontainer/schema/schema.json",
"components": {
"message": "hello world!",
"student": {
"class": "example.Student",
"parameters": [1001, "XiaoMing"],
"properties": {
"age": 17,
"score": 97.5
}
}
}
}
```
在`container.json`中,我们向容器注册了一个`String`和一个`Student`,id分别为`message`和`student`。
3. 新建一个测试类`Test`:
```java
public class Test
{
public static void main(String[] args)
{
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("container.json");
ContainerFactory factory = new JsonContainerFactory(inputStream);
Container container = factory.create();
String message = container.getObject("message");
System.out.println(message);
Student student = container.getObject(Student.class);
System.out.println(student);
}
}
```
4. 运行测试类,控制台输出如下:
```
hello world!
Student{id=1001, name='XiaoMing', age=17, score=97.5}
```
## 组件配置
ByxContainer使用**组件**管理IOC容器中的对象,一个组件封装了一个对象的创建方式。通过对组件的配置,我们就可以对对象的创建方式进行配置,从而创建各种复杂对象。下面列出了ByxContainer中所有组件配置的使用方法。
### 对象创建
* [立即数](./doc/立即数.md)
* [构造函数](./doc/构造函数.md)
* [静态工厂](./doc/静态工厂.md)
* [实例工厂](./doc/实例工厂.md)
### 对象初始化
* [属性设置](./doc/属性设置.md)
* [调用setter方法](./doc/调用setter方法.md)
### 特殊组件声明
* [引用组件](./doc/引用组件.md)
* [局部组件](./doc/局部组件.md)
* [条件组件](./doc/条件组件.md)
* [自定义组件](./doc/自定义组件.md)
### 其它配置
* [类型别名](./doc/类型别名.md)
* [单例](./doc/单例.md)
## 关于AOP
[在ByxContainer中使用AOP](./doc/AOP.md)
## 关于循环依赖
[关于循环依赖](./doc/循环依赖.md)