JavaConfig配置文件为Spring创建bean

来源:互联网 发布:淘宝投诉电话怎么打 编辑:程序博客网 时间:2024/06/08 04:11

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 CDPlayer 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





原创粉丝点击