Spring装配Bean(二)

通过java代码装配bean

很多场景下通过组件扫描和自动装配实现Spring的自动化配置是更为推荐的方案,但是有时候自动化配置方案,不行,比如说将第三方的组件装配到应用中,无法在它的类上添加@Component,@Autowire注解,此时使用

显示装配的方式:java 和xml两种,后面一片文章介绍xml配置

* 创建配置类

package com.erong.service;

import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {

}

@Configuration注解表名这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节

声明简单的bean

编写一个方法,这个方法中会去创建所需要类型的实例,然后给这个方法加上bean注解

@Bean(name="sgt")
public CompactDisc sgtPeppers(){
       return new SgtPeppers();
}

@Bean注解表示返回的对象将注册为一个Bean,并且可以通过name属性修改生成的Bean的id,默认情况下Bean的ID是方法名

借助JavaConfig实现注入

在JavaConfig中装配bean的最简单的方式就是引用创建bean的方法

@Bean
public CDPlayer cdplayer(){
    return new CDPlayer(sgtPeppers());
}

这里同样使用@Bean注解,表明这个方法创建一个bean实例并将其注册到Spring应用上下文中。

sgtPeppers方法上添加@Bean注解,Spring将会拦截所有对它的调用,并确保直接返回该方法创建的bean,而不是每次都对其进行实际的调用。

假如,引入了一个其他的CDPlayer bean,它和之前那个bean完全一样。

@Bean
public CDPlayer cdplayer(){
	return new CDPlayer(sgtPeppers());
}
@Bean
public CDPlayer anotherCDPlayer(){
	return new CDPlayer(sgtPeppers());
}

默认情况下,Spring是单例的,也就是在第二次调用sgtPeppers方法时候,是同一个bean

另外,通过将实例作为方法参数进行注入的方式, 这种情况下是一种自动注入风格,会在Spring上下文中

找到bean,并且注入

@Bean
public CDPlayer cdplayer(CompactDisc cd){
	return new CDPlayer(cd);
}

注意,@Bean注解可以采用任何java方法产生实例

测试

package com.erong.service;


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;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfig.class)
public class CDPlayerTest {
	@Autowired
	private CDPlayer cdplayer;
	@Test
	public void test(){
		cdplayer.play();
	}
}

Spring上下文需要加在的配置类设置为CDPlayerConfig,Spring上下文创建时候就自动创建bean,测试OK

猜你喜欢

转载自blog.csdn.net/ditto_zhou/article/details/80389633