更新時間:2022-08-01 11:31:00 來源:動力節(jié)點 瀏覽2063次
Java依賴注入是什么意思?動力節(jié)點小編來告訴大家。
依賴注入 (DI) 是對象從外部獲取其他所需對象的概念。
DI 可以用任何編程語言實現(xiàn)。依賴注入背后的一般概念稱為控制反轉(zhuǎn)。
如果 Java 類使用此類的實例,則它依賴于另一個類。我們稱之為類依賴。例如,訪問記錄器服務(wù)的類依賴于該服務(wù)類。
理想情況下,Java 類應(yīng)該盡可能獨立于其他 Java 類。這增加了重用這些類的可能性,并且能夠獨立于其他類來測試它們。
如果 Java 類通過new運算符創(chuàng)建另一個類的實例,則不能獨立于該類使用(和測試)它,這稱為硬依賴。下面的例子展示了一個沒有硬依賴的類。
package com.vogella.tasks.ui.parts;
import java.util.logging.Logger;
public class MyClass {
private Logger logger;
public MyClass(Logger logger) {
this.logger = logger;
// write an info log message
logger.info("This is a log message.")
}
}
一個框架類,通常稱為依賴容器,可以分析這個類的依賴關(guān)系。通過這種分析,它能夠創(chuàng)建類的實例并通過 Java 反射將對象注入到定義的依賴項中。
這樣 Java 類就沒有硬依賴,這意味著它不依賴于某個類的實例。這允許您單獨測試您的類,例如使用模擬對象。
模擬對象(模擬)是行為與真實對象相似的對象。但是這些模擬不是編程的;它們被配置為以某種預(yù)定義的方式運行。Mock是一個英文單詞,意思是模仿或模仿。
如果使用依賴注入,則可以單獨測試 Java 類。
存在不同的方法來描述類的依賴關(guān)系。最常見的方法是使用Java注解直接在類中描述依賴關(guān)系。
Java Specification Request 330 (JSR330) 中定義了用于描述類依賴關(guān)系的標準 Java 注釋。本規(guī)范描述了@Inject和@Named注釋。
以下清單顯示了一個使用注釋來描述其依賴關(guān)系的類。
// import statements left out
public class MyPart {
@Inject private Logger logger;
// inject class for database access
@Inject private DatabaseAccessClass dao;
@Inject
public void createControls(Composite parent) {
logger.info("UI will start to build");
Label label = new Label(parent, SWT.NONE);
label.setText("Eclipse 4");
Text text = new Text(parent, SWT.NONE);
text.setText(dao.getNumber());
}
}