java spring 上下文_利用Java代码在某些时刻创建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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值