您的位置:首页 > 其它

装配bean

2016-07-12 23:00 260 查看
spring有三种装配bean的方式:隐式装配、java代码装配、xml装配

隐式装配最为省事方便,也称为自动化装配

java代码装配最为强大、安全、友好重构

这三种装配方式可以混搭着来用

隐式装配和java代码装配都是注解配置

在这里通过一个例子来讲述配置



有一个CD播放器,要依赖CD才能播放

CD的两个实现,一个是ThinkingJAVA,一个是LinuxBird


注解配置


定义bean

@Component
public class ThinkingJAVA{
public void play(){
System.out.println("java思想");
}
}


在这里ThinkingJAVA被Component标识成一个bean,bean的id自动为thinkingJAVA
@Component
public class CDPlayer {
@Autowired(required=true)
public CD cd;
public void play(){
cd.play();
}
}


cdPlayer中有一个自动cd,被标识为自动装配,且一定会装配,如果容器中不存在CD类型的bean,那么就会报错,如果required=false,则表示可装配时装配,如果没有的装配则不会去装配


隐式装配

定义完bean了,现在要把bean装配到容器AppliacationContext中

隐式装配既自动扫包

因为自动扫包默认是关闭的,可以通过java代码开启,也可以通过xml开启


通过java代码开启自动扫包

@Configuration
//扫描当前类的包及其自包
//@ConponentScan()
//扫描string指定包及其子包
//不推荐这种方式,不利于代码重构,也不好检查错误
//@ConponenetScan(basePackages="soundsystem")
//扫描指定class所在的包及其子包
//推荐这种方式,利于代码重构
//可以设置一个空接口用来标识基础包
//表示扫描CD类和CDPlayer所在的包及其子包
@ConponentScan(basePackageClasses={CD.class,CDPlayer.class})
public class CDPlayerConfig {
}


最好把配置的类单独放在配置包,不要跟业务逻辑搅在一起


xml开启自动扫包

<context:component-scan base-package="要扫描的包及其子包"></context:component-scan>


在xml文件中加上这么一句


java代码装配

@Configuration
public class CDPlayerConfig {
//指定bean
@Bean
public ThinkingJAVA thingkingJAVA(){
return new ThinkingJAVA();
}
@Bean
public CDPlayer cDPlayer(){
return new CDPlayer();
}
}


bean的id就是方法名

可以看到这种java代码来装配的方式

可以用java代码来构造出实例,所以很强大,有很多种可能性

同时bean默认是单例的


混搭装配

java代码装配和xml装配可以整合起来


将两个java装配类合为一个

现在有CDConfig.class和CDPlayer.class两个装配类

将他们合为一个SoundsystemConfig.class
@Configuration
@Import(CDConfig.class,CDPlayer.class)
//如果要整合xml
//@ImportResource("classpath:cdconfig.xml")
public class SoundsystemConfig {
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: