1 Star 2 Fork 0

MikkoAyaka/WolfLink-IOC

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

WolfLink - IOC

介绍

本项目是一个轻量级并且线程安全的 Java IOC(控制反转)容器,整个项目只包括一个 IOC 类以及三个注解:BeanProviderInjectSingleton

IOC 容器是一些大型框架的核心部分(如 Spring,Solon...),但对于一些简单应用来说,这些框架可能会显得过于重量级。本项目旨在为这些应用提供一个简单轻量实用可靠的替代方案。

  • BeanProvider:此注解用于标记在配置类中提供 bean 的方法。该方法的返回类型就是提供的 bean 的类型,方法不接受参数,方法名随意。
  • Inject:此注解用于标记需要注入的字段,在通过 IOC 容器获取该字段所属类的实例时将自动为这些字段绑定到相应单例或创建新的实例。
  • Singleton:此注解用于标记单例类。对于标记为 Singleton 的类,IOC 容器将只创建一个实例。

引入依赖

Maven

<repositories>
	<repository>
	    <id>jitpack.io</id>
		<url>https://jitpack.io</url>
	</repository>
</repositories>
<dependency>
	<groupId>com.github.WolfLink-DevTeam</groupId>
	<artifactId>WolfLink-IOC</artifactId>
	<version>建议填写当前最新版本</version>
</dependency>

快速使用

以下是如何在您的 Java 项目中使用此轻量级 IOC 容器的示例:

通过IOC容器获取实例

使用 @Singleton 注解标记的类是单例类,通过 IOC 容器获取其实例时会保证该类的实例不会超过1个。 不使用 @Singleton 注解标记的类是多例类,每次通过 IOC 容器获取实例都会创建一个新的实例。

import org.wolflink.common.ioc.IOC;
import org.wolflink.common.ioc.Singleton;

class Test {
    Test(){}
    Test(int a){}
}

@Singleton
class SingletonTest {
}

public class Main {
    public static void main(String[] args) {
        Test test1 = IOC.getBean(Test.class);
        Test test2 = IOC.getBean(Test.class);
        // 构造器参数按照这种方式传入
        Test test3 = IOC.getBean(Test.class,114514);
        SingletonTest sTest1 = IOC.getBean(SingletonTest.class);
        SingletonTest sTest2 = IOC.getBean(SingletonTest.class);
        // 最后的结果是 test1 != test2 != test3 而 sTest1 == sTest2
    }
}

创建一个配置类并使用 BeanProvider 注解提供 bean

package org.example;

import org.wolflink.common.ioc.BeanProvider;

public class AppConfig {

    @BeanProvider
    public Service provideService() {
        return new ServiceImpl();
    }
}

然后,在使用 IOC 获取该 Service 类型的 bean 之前调用以下代码注册配置类:

import org.wolflink.common.ioc.IOC;

public class Main {
    public static void main(String[] args) {
        // 注册配置类
        IOC.registerBeanConfig(AppConfig.class);
        // 使用配置类中提供的 Bean,此时service实例的实际类型为 ServiceImpl
        Service service = IOC.getBean(Service.class);
    }
}

使用 Inject 注解在您的类中注入依赖

package org.example;

import org.wolflink.common.ioc.Inject;

public class Client {

    @Inject
    private Service service;

    public void doSomething() {
        service.doWork();
    }
}

通过 IOC 容器获取 Bean:

package org.example;

import org.wolflink.common.ioc.IOC;

public class Main {

    public static void main(String[] args) {
        // 获取bean
        Client client = IOC.getBean(Client.class);
        // 使用bean
        client.doSomething();
    }
}
MIT License Copyright (c) 2023 WolfLink-DevTeam Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

轻量高效并且线程安全的IOC容器,适用于小型项目 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/mikkoayaka/WolfLink-IOC.git
git@gitee.com:mikkoayaka/WolfLink-IOC.git
mikkoayaka
WolfLink-IOC
WolfLink-IOC
master

搜索帮助

Cb406eda 1850385 E526c682 1850385