日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java之Spring实现控制反转

發(fā)布時間:2024/4/14 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java之Spring实现控制反转 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先來復習一下多態(tài)吧,簡單點講,就是一個類的引用可以指向其本身以及其子類的對象。

Like these:

FatherClass a = new FatherClass();

FatherClass a = new Son1Class();

FatherClass a = new Son2Class();

再來說說接口和其實現(xiàn)類,父類和子類是繼承關系(父子關系),接口和實現(xiàn)類的關系與之是有區(qū)別的;

接口中只定義方法,沒有方法體,而接口實現(xiàn)類就是負責補充方法體,多個實現(xiàn)類的方法體可以是不同的。

現(xiàn)在定義一個接口InterfaceDemo和兩個實現(xiàn)類Demoimp1、Demoimp2.三個類都有同名方法say();

InterfaceDemo b = new Demoimp1();

InterfaceDemo c = new Demoimp2();

那么b.say()和c.say()是調(diào)用了兩個不同的方法的。

說到這,就該輪到Spring閃亮登場了!!!

1.面向接口的編程

從上面我們可以看到,我們想要調(diào)用某個實現(xiàn)類的say()方法,先要實例化一個這個類的對象,無論是直接實例化

還是通過引用多態(tài)的方式實例化該類對象。

而面向接口呢,是不顯式地實例化這個實現(xiàn)類對象,而是定義一個接口類的對象,然后定義方法去調(diào)用接口類對

象的方法,然后在程序要真正使用這個方法時,先通過setter()方法來聲明這個接口類對象具體是指向哪個實現(xiàn)類

的對象,然后運行這個方法時就會真正調(diào)用接口實現(xiàn)類的的方法了(接口和實現(xiàn)類的方法名都相同)。

1 public class Userservice { 2 // 定義接口的引用 3 private UserDao userdao; 4 5 // 定義setter方法,設置接口的引用指向哪個實現(xiàn)類的對象 6 public void setUserdao(UserDao userdao) { 7 this.userdao = userdao; 8 } 9 10 public void useradd(User newuser) { 11 // 此時的userdao經(jīng)過spring依賴注入之后已經(jīng)實現(xiàn)指向特定的接口實現(xiàn)類對象 12 // 那么調(diào)用接口的方法,實際上是調(diào)用了特定實現(xiàn)類的方法的 13 userdao.adduser(newuser); 14 } 15 }

2.依賴注入

又叫做接口注入,可以看做規(guī)定這個接口對象userdao到底要指向哪個實現(xiàn)類的對象,進而實現(xiàn)對何種實現(xiàn)類方法

的調(diào)用。

以下是beans.xml文件:

1 <bean id="todo" class="com.eco.daoimp.Usertodo1"></bean> 2 3 <!--定義Userservice類內(nèi)部接口的引用(userdao)指向具體的實現(xiàn)類對象(Usertodo1) --> 4 <bean id="userservice" class="com.eco.service.Userservice"> 5 <property name="userdao" ref="todo"></property> 6 </bean>

依賴注入有三種方法,在這里只說最常用的setter注入,紅字可以看做是一個連接器,上面的第二個bean標簽實現(xiàn)

了聲明接口對象userdao是指向Usertodo1這個實現(xiàn)類的,那么自然之前的userdao.adduser(newuser)實際上也就等

于實例化一個Usertodo1對象,然后調(diào)用Usertodo1對象的adduser(newuser)方法。

3.測試類通過對xml文件的操作來明確接口對象的指向

1 public class Test1 { 2 @Test 3 public void add() { 4 // Spring讀取beans。xml文件 5 ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); 6 // 解析id為userservice的bean標簽,內(nèi)部實現(xiàn)UserDao userdao = new Usertodo1() 7 Userservice service = (Userservice) ctx.getBean("userservice"); 8 User newuser = new User("桔子桑", 31); 9 // 此時調(diào)用的useradd()方法,就是接口實現(xiàn)類Usertodo1的useradd()方法 10 service.useradd(newuser); 11 } 12 }

如此,就實現(xiàn)了通過xml文件來對Usertodo1的useradd(newuser)方法的調(diào)用。我為每個實現(xiàn)類的方法添加了標記,

1 //Usertodo1類 2 System.out.println("todo1 create the user"); 3 4 //Usertodo2類 5 System.out.println("todo2 create the user");

上面的bean文件配置,最后運行測試了類,控制臺打印輸出:

1 todo1 create the user

然后我們改一下上面的bean標簽如下:

1 <bean id="todo" class="com.eco.daoimp.Usertodo2"></bean>

控制臺打印輸出:

1 todo2 create the user

這樣我們只需通過更改bean文件就能實現(xiàn)對不同實現(xiàn)類方法的調(diào)用了,再也不用在代碼中具體實例化這個實現(xiàn)類了,

這就相當于把控制權交給了Spring,實現(xiàn)了控制反轉。

?

轉載于:https://www.cnblogs.com/eco-just/p/7842513.html

總結

以上是生活随笔為你收集整理的java之Spring实现控制反转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。