Spring 装配Bean(二):在JAVA代码中装配bean
在大多数情况下通过Spring组件扫描以及自动装配bean都是更为推荐的,但是当我们想把第三方类库中的组件添加到IOC容器中时,我们不可能到源代码中去添加
@Component
和
@AutoWired
注解,所以这种时候我们不能使用自动化装配。
而显示装配方式有两种,通过java的装配和通过XML装配,这篇博客主要介绍通过JAVA代码的装配方式。
创建配置类
在自动化装配中我们也用到过配置类,关键在于给类添加@Configuration
注解,。而后我们对Spring bean的配置和装配都应该在配置类中完成。
package soundSystem;
/*java Spring配置类*/
import org.springframework.context.annotation.Configuration;
/**
@Configuration注解标记Spring配置类
*/
@Configuration
public class CDPlayerConfig {
}
声明简单的bean
声明简单的bean只需要在javaConfig类中添加一个创建所需类型实例的方法并使用@Bean
注解
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
bean的ID和方法名默认一致,或者可以通过name属性指定
@Bean(name="lonelyHeartsClubBand")
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
事实上这个方法不一定非得是只有一个返回构造器产生的实例,他只需要最后返回的是一个某类型的对象即可,所以方法体可以更加丰富。例如下面的代码可以当Spring获取bean时产生一张随机的cd:
@Bean()
public CompactDisc randomBeatlesCD(){
int choice = (int) Math.floor(Math.random() *4);
if(choice == 0)
return new SgtPeppers();
else if(choice == 1)
return new WhiteAlbum();
else if(choice == 2)
return new HardDasNight();
else
return new Revolver();
}
接下来,和自动装配时一样,我们需要实现将CompactDisc注入到CDPlayer中去。
使用javaConfig配置实现注入
装配bean时,最简单的就是直接调用之前创建bean的方法:
@Bean
public CDPlayer cdPlayer(){
return new CDPlayer(sgtPeppers());
}
CDPlayer同样使用了@Bean
注解,说明这个方法创建一个bean实例到IOC容器中,并且把添加了@Bean
注解的sgtPeppers()方法传入到CDPlayer的构造器中作为参数以此完成了装配,Spring会拦截对添加注解的方法的直接调用而直接返回容器中的bean。
还有一种方法是方法中包含一个CompactDisc参数,当Spring调用方法创建CDPlayer bean的时候,自动装配一个CompactDisc到方法中。
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc){
return new CDPlayer(compactDisc);
}
采用setter注入或者调用普通方法也是可以的
@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc){
CDPlayer cdPlayer = new CDPlayer();
cdPlayer.setCompactDisc(compactDisc);
return cdPlayer;
}