上一篇中,描述瞭如何使用Spring隱式的創建bean,但當我們需要引進第三方類庫添加到我們的邏輯上時,@Conponent與@Autowired是無法添加到類上的,這時,自動裝配便不適用了,我們需要利用Java代碼來顯式實現bean。 @Autowired只表明在調用構造器時Spring為其註入一 ...
上一篇中,描述瞭如何使用Spring隱式的創建bean,但當我們需要引進第三方類庫添加到我們的邏輯上時,@Conponent與@Autowired是無法添加到類上的,這時,自動裝配便不適用了,我們需要利用Java代碼來顯式實現bean。
繼上次的CD常式,兩個介面,MediaPlayer/CompactDisc,其中MediaPlayer的實現為CDPlayer,CompactDisc的實現為CompactDisc_guangliang/CompactDisc_wangfei/CompactDisc_zhoujielun/CompactDisc_xusong。(之所以這麼多是為了理解Spring的單次bean多次使用機制,通俗講就是Spring為每一個bean只創建一個對象)代碼可由上篇改動而來,這次去掉了創建註解與掃描註解。部分代碼如下,其他實現與之類似:
package com.spring.javabeans.cd; import org.springframework.beans.factory.annotation.Autowired; public class CDPlayer implements MediaPlayer{ private CompactDisc cd; @Autowired//表明Spring初始化後儘可能地去滿足bean的依賴,在這裡它註入了一個CompactDisc的對象 public CDPlayer(CompactDisc cd){ this.cd=cd; } @Override public void player() { System.out.println("使用CD播放!"); } }
@Autowired只表明在調用構造器時Spring為其註入一個需要的bean
package com.spring.javabeans.cd; public class CompactDisc_guangliang implements CompactDisc{ private String title="童話"; private String artist="光良"; @Override public void play(){ System.out.println("播放:"+title+"來自藝術家:"+artist); } }
去除了@Component之後,CompactDisc變成一個普通類,在這裡,Spring不對其負責。
接下來寫配置類。代碼如下:
package com.spring.javabeans.cd; import org.springframework.context.annotation.Bean; //通過java代碼定義spring的裝配機制 public class CDPlayerConfig { @Bean public CompactDisc randomBeatlesCD(){ int key=(int)Math.floor(Math.random()*4); if(key==0){ return new CompactDisc_zhoujielun(); } else if(key==1){ return new CompactDisc_xusong(); } else if(key==2){ return new CompactDisc_guangliang(); } else{ return new CompactDisc_wangfei(); } } @Bean public CDPlayer cdplayer(CompactDisc cd){ return new CDPlayer(cd); } }
@bean表明瞭Spring需要在這裡創建一個bean。
同樣,我們用一個建一個JUnit4測試。代碼如下:
package com.spring.javabeans.cd; import static org.junit.Assert.*; import org.junit.runner.RunWith; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=CDPlayerConfig.class) public class CDTest { @Autowired private MediaPlayer player; @Autowired private CompactDisc cd; @Test public void test1() { assertNotNull(player); assertNotNull(cd); } @Test public void test2(){ player.player(); cd.play(); } }
@Autowired表明瞭依賴註入關係。
熱愛分享拒絕拿來主義,博客精神永存——cvrigo
2016-11-09 13:40:56