程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 利用Java代碼在某些時刻創建Spring上下文,javaspring

利用Java代碼在某些時刻創建Spring上下文,javaspring

編輯:JAVA綜合教程

利用Java代碼在某些時刻創建Spring上下文,javaspring


上一篇中,描述了如何使用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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved