Spring入门(三):通过JavaConfig装配bean
上一篇博客中,我们讲解了使用组件扫描和自动装配实现自动化装配bean,这也是最好的使用方式。
但是某些场景下,我们可能无法使用自动装配的功能,此时就不得不显式的配置bean。
比如我们引用了一个第三方类库,需要将类库中的某个类装配到项目中,我们不可能在该类上添加@component注解,因此无法使用自动装配的功能。
spring中有以下两种方式显式配置bean:
- 通过javaconfig配置bean
- 通过xml配置bean
本篇博客主要讲解下通过javaconfig配置bean的实现方法,通过xml配置bean的实现方法后续再单独写一篇博客。
我们还使用上一篇博客中的例子,不过代码会做适当修改。
package soundsystem.javaconfig; public interface compactdisc { void play(); }
package soundsystem.javaconfig; public class sgtpeppers implements compactdisc { @override public void play() { string title = "sgt.pepper's lonely hearts club band"; string artists = "the beatles"; system.out.println("playing " + title + " by " + artists); } }
package soundsystem.javaconfig; public class cdplayer { private compactdisc compactdisc; public cdplayer(compactdisc compactdisc) { this.compactdisc = compactdisc; } public void play() { compactdisc.play(); } }
注意:和上一篇博客相比,我们去掉了sgtpeppers类和cdplayer类上的@component注解。**
1.创建配置类
package soundsystem.javaconfig; import org.springframework.context.annotation.configuration; @configuration public class cdplayerconfig { }
2.声明bean
在javaconfig中,我们使用@bean注解来声明bean,如下所示:
package soundsystem.javaconfig; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; @configuration public class cdplayerconfig { @bean public compactdisc sgtpeppers() { return new sgtpeppers(); } }
默认生成的bean id和方法名一致,即sgtpeppers,不过我们可以自定义:
@bean(name = "lonelyheartsclub") public compactdisc sgtpeppers() { return new sgtpeppers(); }
上面声明的bean比较简单,没有任何其它依赖,但是有些复杂的bean,比如cdplayer,它依赖于compactdisc,那我们该如何声明呢?
简单的一种方式是,直接使用刚刚定义的sgtpeppers()方法作为cdplayer构造器的参数依赖:
@bean public cdplayer cdplayer() { return new cdplayer(sgtpeppers()); }
不过更建议的是以下方式,将依赖项作为bean方法的参数,spring会自动匹配到参数依赖项:
@bean public cdplayer cdplayer(compactdisc compactdisc) { return new cdplayer(compactdisc); }
此时配置类的代码为:
package soundsystem.javaconfig; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; @configuration public class cdplayerconfig { @bean //@bean(name = "lonelyheartsclub") public compactdisc sgtpeppers() { return new sgtpeppers(); } /*@bean public cdplayer cdplayer() { return new cdplayer(sgtpeppers()); }*/ @bean public cdplayer cdplayer(compactdisc compactdisc) { return new cdplayer(compactdisc); } }
3.验证bean是否装配成功
新建测试类cdplayertest:
package soundsystem.javaconfig; import org.springframework.context.applicationcontext; import org.springframework.context.annotation.annotationconfigapplicationcontext; public class cdplayertest { public static void main(string[] args) { applicationcontext applicationcontext = new annotationconfigapplicationcontext(cdplayerconfig.class); compactdisc compactdisc = (sgtpeppers) applicationcontext.getbean("sgtpeppers"); compactdisc.play(); cdplayer cdplayer = applicationcontext.getbean(cdplayer.class); cdplayer.play(); } }
运行结果:
从运行结果可以看出,bean装配成功。
4.源码地址
https://github.com/zwwhnly/springstudydemo.git,欢迎大家下载,有问题可以多多交流。
上一篇: 使用fastJson把对象转字符串首字母大小写问题的解决
下一篇: 以身施教