Yadi是基於Java8的依賴注入容器
Yadi是一個型別安全的依賴注入Dependency Injection容器,使用Java 8特性提供依賴配對wiring.
Yadi 有如下特點:
1.佔據很小的記憶體,自身大小不超過100kb
2.不會建立不必要的依賴。
3.容易快速設定執行。
4.元註解降低到最小。
Yadi的原理是利用Java 8的lambda特點,如:
ObjectDefintion使用正常的反射建立物件,然後執行 系列java.util.function.BiConsumer介面,傳入實體物件的例項和相應的數值。
再使用Java 8的方法引用對上面程式碼進行加工,第一個引數是例項值,後面是相應的方法引數。
然後進一步使用容器替代ObjectDefinition:
以上是Yadi的原理,下面說明如何使用Yadi進行物件之間的注入。假設有一個類Person:
將一個叫“sSmith”的Person例項注入到另外一個叫"jSmith"的Person例項中:
Yadi提供的依賴注入比Spring更加輕量,使用函式程式設計風格進行物件構建更自然和簡單。
開源網址:https://github.com/jexenberger/yadi
Yadi 有如下特點:
1.佔據很小的記憶體,自身大小不超過100kb
2.不會建立不必要的依賴。
3.容易快速設定執行。
4.元註解降低到最小。
Yadi的原理是利用Java 8的lambda特點,如:
MyObject result = new ObjectDefinition() .type(MyObject.class) .set((myObject, value)-> myObject.setA(value), "hello world") .set((myObject, value)-> myObject.setB(value), "hallo welt") .create(); <p class="indent"> |
ObjectDefintion使用正常的反射建立物件,然後執行 系列java.util.function.BiConsumer介面,傳入實體物件的例項和相應的數值。
再使用Java 8的方法引用對上面程式碼進行加工,第一個引數是例項值,後面是相應的方法引數。
MyObject result = new ObjectDefinition() .type(MyObject.class) .set(MyObject::setA, "hello world") .set(MyObject::setB, "hallo welt") .create(); <p class="indent"> |
然後進一步使用容器替代ObjectDefinition:
Container container = create((builder) -> { builder .define(MyObject.class) .set(MyObject::setA, "hello world"); }); String myString = container.get(MyObject.class); <p class="indent"> |
以上是Yadi的原理,下面說明如何使用Yadi進行物件之間的注入。假設有一個類Person:
public class Person { String name; String surname; String fullName; Person spouse; public Person() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getFullName() { return fullName; } public Person getSpouse() { return spouse; } public void setSpouse(Person spouse) { this.spouse = spouse; } public void setup() { this.fullName = this.name + " " + this.surname; } } <p class="indent"> |
將一個叫“sSmith”的Person例項注入到另外一個叫"jSmith"的Person例項中:
import static org.yadi.core.DefaultContainer.create; ... Container container = create((builder) -> { builder .define(Person.class) .named("sSmith"); .set(Person::setName, "Sarah") .set(Person::setSurname, "Smith") .initWith(Person::setup); builder .define(Person.class) .named("jSmith"); .set(Person::setName, "John") .set(Person::setSurname, "Smith") .inject(Person::setSpouse, "sSmith") .initWith(Person::setup); }); Person person = container.get("jSmith"); System.out.println(person.getSpouse().getFullName()); <p class="indent"> |
Yadi提供的依賴注入比Spring更加輕量,使用函式程式設計風格進行物件構建更自然和簡單。
開源網址:https://github.com/jexenberger/yadi
相關文章
- IOC容器和依賴注入依賴注入
- 依賴注入?依賴注入是如何實現解耦的?依賴注入解耦
- PHP 依賴注入容器實現PHP依賴注入
- PHP 依賴注入容器 Pimple 筆記PHP依賴注入筆記
- 什麼是依賴注入依賴注入
- 關於依賴注入(typescript)依賴注入TypeScript
- 淺析依賴倒轉、控制反轉、IoC 容器、依賴注入。依賴注入
- 【譯】深入研究Laravel的依賴注入容器Laravel依賴注入
- C#中的依賴注入和IoC容器C#依賴注入
- 一文秒懂什麼是依賴注入, Ioc容器依賴注入
- 服務容器(自己總結)依賴注入依賴注入
- PHP 依賴注入基礎理解PHP依賴注入
- PHP中的服務容器與依賴注入的思想PHP依賴注入
- 看完後你就知道什麼是依賴注入與Ioc容器了依賴注入
- ASP.NET Core中的依賴注入(2):依賴注入(DI)ASP.NET依賴注入
- Simple Injector是.NET的依賴注入庫包依賴注入
- angular依賴注入Angular依賴注入
- XUnit 依賴注入依賴注入
- Struts 依賴注入依賴注入
- 關於Golang中的依賴注入實現Golang依賴注入
- 依賴倒置(DIP)與依賴注入(DI)依賴注入
- Angular 的依賴注入是怎麼實現的?Angular依賴注入
- 又一個強大的PHP5.3依賴注入容器PHP依賴注入
- 又一個「簡單」的 PHP5.3 依賴注入容器PHP依賴注入
- spring 的依賴注入Spring依賴注入
- JavaScript裡的依賴注入JavaScript依賴注入
- spring原始碼解析之IOC容器(三)——依賴注入Spring原始碼依賴注入
- Asp.net core自定義依賴注入容器,替換自帶容器ASP.NET依賴注入
- [譯] 依賴注入?? 哈??依賴注入
- Angular 依賴注入原理Angular依賴注入
- .Net Core — 依賴注入依賴注入
- 理解 Angular 依賴注入Angular依賴注入
- Spring依賴注入Spring依賴注入
- Spring依賴注入---Spring依賴注入
- 依賴注入系列教程依賴注入
- 我看依賴注入依賴注入
- webapi - 使用依賴注入WebAPI依賴注入
- 依賴注入是否值得?依賴注入