代码拉取完成,页面将自动刷新
本项目是一个轻量级并且线程安全的 Java IOC(控制反转)容器,整个项目只包括一个 IOC
类以及三个注解:BeanProvider
,Inject
,Singleton
。
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 容器的示例:
使用 @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
注解提供 beanpackage 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();
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型