更新時(shí)間:2022-08-01 11:31:00 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1673次
Java依賴注入是什么意思?動(dòng)力節(jié)點(diǎn)小編來告訴大家。
依賴注入 (DI) 是對象從外部獲取其他所需對象的概念。
DI 可以用任何編程語言實(shí)現(xiàn)。依賴注入背后的一般概念稱為控制反轉(zhuǎn)。
如果 Java 類使用此類的實(shí)例,則它依賴于另一個(gè)類。我們稱之為類依賴。例如,訪問記錄器服務(wù)的類依賴于該服務(wù)類。
理想情況下,Java 類應(yīng)該盡可能獨(dú)立于其他 Java 類。這增加了重用這些類的可能性,并且能夠獨(dú)立于其他類來測試它們。
如果 Java 類通過new運(yùn)算符創(chuàng)建另一個(gè)類的實(shí)例,則不能獨(dú)立于該類使用(和測試)它,這稱為硬依賴。下面的例子展示了一個(gè)沒有硬依賴的類。
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.")
}
}
一個(gè)框架類,通常稱為依賴容器,可以分析這個(gè)類的依賴關(guān)系。通過這種分析,它能夠創(chuàng)建類的實(shí)例并通過 Java 反射將對象注入到定義的依賴項(xiàng)中。
這樣 Java 類就沒有硬依賴,這意味著它不依賴于某個(gè)類的實(shí)例。這允許您單獨(dú)測試您的類,例如使用模擬對象。
模擬對象(模擬)是行為與真實(shí)對象相似的對象。但是這些模擬不是編程的;它們被配置為以某種預(yù)定義的方式運(yùn)行。Mock是一個(gè)英文單詞,意思是模仿或模仿。
如果使用依賴注入,則可以單獨(dú)測試 Java 類。
存在不同的方法來描述類的依賴關(guān)系。最常見的方法是使用Java注解直接在類中描述依賴關(guān)系。
Java Specification Request 330 (JSR330) 中定義了用于描述類依賴關(guān)系的標(biāo)準(zhǔn) Java 注釋。本規(guī)范描述了@Inject和@Named注釋。
以下清單顯示了一個(gè)使用注釋來描述其依賴關(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());
}
}
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743