6. 以下耦合度中最松散的耦合是_Spring Java中的依赖注入,它是如何工作的?- 知识铺...
知識鋪: 致力于打造輕知識點,持續更新每次的知識點較少,閱讀不累。不占太多時間,不停地來喚醒記憶深處的知識點。
一、Spring 框架 POJO
Spring Framework是一個開源的應用程序框架和控件容器的反轉。簡單的理解,它是一個集成了各種Java技術或API的框架,這使得它可以用簡單的POJO來實現它?!笆裁词荘OJO?”,POJO是一個普通的Java對象,可能有setter和getter字段,可能會覆蓋Object或interface中的某些方法,但是沒有自己的行為。
例:
class PojoExample {
private String name;
private int age;
public String getName() { return this.name; }
public int getAge() { return this.age; }
public void setName(string name) { this.name = name; }
public void setAge(int age) { this.age = age; }
public boolean equals(Object other) {...}
}
二、依賴注入工作方式
依賴注入是Spring框架最受歡迎的特性之一,它是一種設計模式,允許構建解耦的系統。假設兩個類繼承自單個公共父類,顯然一個類中的更改也會影響另一個類。簡單地說,解耦是一種允許對從公共父類繼承而不影響任何其他類的任何一個類進行更改的方法。實現依賴注入以實現應用程序中的松散耦合和可擴展性。這種模式的主要目標是使類盡可能獨立于另一個類,這增加了重用這些類的可能性,并能夠獨立于其他類測試它們。
如果使用“B”作為其變量,則類“A”被認為與類“B”具有依賴性。如果們使用注入類“A”的依賴注入類“B”,這可以通過兩種主要方式完成:
1)參數注入
它是DI最簡單但最受歡迎的方式之一,它將通過setter方法注入依賴項。例:
public class Information
{
PersonalInformation personalInfo;
public void setPersonalInfo(PersonalInformation personalInfo){
this.personalInfo = personalInfo;
}
}
在上面的示例中,通過setter方法將類名稱PersonalInformation注入到類Information中。
2)構造函數注入
在這種方法中,DI方法將通過構造函數注入依賴項。
例:
public class Information
{
PersonalInformation personalInfo;
Information(PersonalInformation personalInfo){
this.personalInfo = personalInfo;
}
}
在上面的示例中,通過構造函數將類名稱PersonalInformation注入到類Information中。
三、依賴注入的好處
舉一個消息傳遞服務的例子,可以從中執行不同類型的消息傳遞方法,如電子郵件,短信,語音消息等。現在創建一個每個消息方法類應該實現的接口 -
public interface Message {
void messagingMethod();
}
現在創建一個消息傳遞方法,并實現上述接口 -
public class EmailMessaging implements Message{
public void messagingMethod() {
System.out.println("Send Message through email!");
}
}
現在創建一個MessageService接口,它有一個抽象方法來發送消息。
public interface MessageService {
void sendMessage();
}
最后,將為其實現創建一個類,
public class MessageServiceImpl implements MessageService {
private EmailMessaging emailMessage;
MessageServiceImpl(){
this.emailMessage = new EmailMessaging();
}
public void sendMessage() {
emailMessage.messagingMethod();
}
}
分析一下這個MessageServiceImpl類中的問題:
1)由于它正在創建自己的EmailMessaging參考,它與EmailMessaging功能緊密耦合,對于SMS,Voice等其他所有方法,也必須以類似的方式引用它們。
2)由于MessageServiceImpl與EmailMessaging類緊密耦合,無法模擬其單元測試的依賴性。
3)這種強依賴,在為單獨的行為和使用接口創建單獨的類之后做很多工作,但是在MessageServiceImpl中引入了EmailMessaging本身,導致消息服務類強依賴Email服務。
解決:為了解決這些問題,可以引入一個外部類,它將負責注入這些依賴項,以便對象本身不負責創建它們的依賴項,但依賴項將被注入到對象中。
重寫MessageServiceImpl的代碼,依賴注入的實現方式。
public class MessageServiceImpl implements MessageService {
private Message message;
MessageServiceImpl(Message message){
this.message = message;
}
public void sendMessage() {
message.messagingMethod();
}
}
看看tabove代碼,現在應該已經清楚了解依賴注入概念?,F在只需將它與MessageServiceImpl類的早期實現進行比較,就沒有EmailMessaging類的依賴,因此類MessageServiceImpl與任何特定實現都沒有緊密耦合。
現在在這個類MessageServiceImpl中,依賴是通過類的構造函數注入的:
MessageService messageService = new MessageServiceImpl(new EmailMessaging());
messageService.sendMessage();
對于SMS實現,們可以這樣做:
MessageService messageService = new MessageServiceImpl(new SmsMessaging());
messageService.sendMessage();
這將調用SmsMessaging特定的實現。
代碼松散耦合,因為類MessageServiceImpl現在沒有綁定到任何特定的實現,因為它只知道在運行時可以通過特定實現輕松交換的接口。
總結
以上是生活随笔為你收集整理的6. 以下耦合度中最松散的耦合是_Spring Java中的依赖注入,它是如何工作的?- 知识铺...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse创建springboot项
- 下一篇: python 最小二乘回归 高斯核_最经