您的位置:首页 > 编程语言 > Java开发

JavaConfig配置文件为Spring创建bean

2017-06-22 15:05 495 查看

Spring容器创建Bean的三种方法:JavaConfig,XML配置,自动装配

JavaConfig是独立于Spring的一个项目,在Spring3.0后出现。大部分企业中还是最常见的为自动装配及XML配置,其实JavaConfig也可被视为一个XML文件,只是由Java代码编写。XML配置文件只有在运行的时候的才检查Bean是否配置正确,比如如果没有相应的注解,无法注入到Spring容器,在启动时会报错,但是JavaConfig则会在编译的时候直接提示,利于提前发现错误。

JavaConfig是一个配置类,用@Configuration注解来向Spring容器声明该类为一个配置类,通常单独放在一个包内。JavaConfig中实际就是为Spring配置Bean,通过@Bean来向Spring注入一个Bean并且返回一个类的实例化,容器中的类名就是Bean类的首个字母小写。可以想象,JavaConfig可以配置所有Spring需要的Bean,和XML文件配置及自动装配是一样的,JavaConfig注入Bean和其他两种方法向Spring容器中注入Bean是一样的,有DI依赖注入,依赖注入也相同,构造器注入,Setter方法依赖注入。下面的例子是简单的JavaConfig配置。

该例子的意思为一个CDPlayer需要依赖一个CompactDisc也就是光盘才可以工作,依赖这个光盘。

package JavaZhuangpeiBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import soudSystem.CDPlayer;

import soudSystem.CompactDisc;

import soudSystem.SgtPeppers;

@Configuration

public class CDPlayerConfig2 {

@Bean

public CDPlayer cdplayer(CompactDisc compactDisc){

return new CDPlayer(compactDisc);                         //对这两个实例都通过构造器进行依赖注入一个compactDisc,查看一下Spring
                                                                                      容器中对于同一个类的对象是否会创建多个
}

@Bean
public CDPlay
bdaf
er anothercdplayer(CompactDisc compactDisc){
return new CDPlayer(compactDisc);
}
}

以上的配置文件向Spring容器声明了两个类,通过构造器注入了compactDisc。

package soudSystem;

public calss CompactDisc {

void play(){

System.out.println("----play------");

}

}

以上创建一个类,有一个方法play。由此可以做个推断 1:如果play方法运行了,那么CompactDisc的对象肯定是创建了,否则无法运行其方法。2:CompactDisc要创建,必须CDPlayer的Bean要在容器中注册并创建,因为CDPlayer要依赖CompactDisc,CompactDisc已经创建了,CDPlayer必然创建了。那么到底是不是呢,我们用Junit来测试一下这两个Bean(CDPlayer,CompactDisc)是否为空,如果不为空,则表示已经通过JavaConfig在Spring容器中创建好了。

package JavaZhuangpeiBean;

import static org.junit.Assert.*;

import org.junit.After;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import soudSystem.CDPlayer;

import soudSystem.CDPlayerConfig;

import soudSystem.CompactDisc;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes=CDPlayerConfig2.class)

public class CDPlayerConfig2Test {

@Autowired

private CompactDisc compactDisc;

@Autowired

private CDPlayer cdplayer;

@Test

public void testCdplayer() {

assertNotNull(compactDisc);

compactDisc.play();

Boolean flag=compactDisc.equals(compactDisc);
System.out.println(flag);
}

@Test
public void testAnothercdplayer() {
assertNotNull(compactDisc);
Boolean flag=compactDisc.equals(compactDisc);
System.out.println(flag);
}

}



运行结果:

----play------                    //由运行结果可看出不为null,说明已经创建bean成功了,调用
 其方法也没有错
true                                //由此可看出两个compactDisc是相同的,表明Spring对一同一个类只创建一个,Spring                                                             中的Bean都是单单例的。
true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: