2.1 回顾
对于我第一天在 bean 的装配中写的,是一些基本的语法或者是 Spring 本身的一些规定,但是我没有对此进行深究。接下来就让我们仔细的讨论一下细节问题。和传统的类的定义和方法的调用做一些比较。这样就会体现出 Ioc 的特点。 下面的 UML 图就是我之前定义的一个接口和自己的一个实现。
- public interface CompactDisc {
- void play();
- }
- @Component
- public class SgtPeppers implements CompactDisc {
- private String title="享受孤独的音乐";
- private String article="奏出和谐的篇章";
- public void play() {
- System.out.println(title+article);
- }
- }
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(classes = CDPlayConfig.class)
- public class CDPlayerTest {
- @Autowired
- private CompactDisc cd;
- @Test
- public void test(){
- cd.play();
- }
- @Configuration
- @ComponentScan
- public class CDPlayConfig {
- }
2.2 基于 Java 注解的 bean 的装配
- Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [cn.czg.test.CompactDisc]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
- @Configuration
- public class CDPlayConfig {
- @Bean
- public CompactDisc sgtPeppers(){
- return new SgtPeppers();
- }
- }
- @Bean
- public IFoo getFooInstance(){
- int floor =(int) Math.floor(Math.random() * 4);
- if(floor==1){
- return new FooDemo1();
- }else if(floor==2){
- return new FooDemo2();
- }else {
- return new FooDemo3();
- }
- }
- @Configuration
- public class CDPlayerConfig {
- @Bean
- public CompactDisc compactDisc() {
- return new SgtPeppers();
- }
- @Bean
- public CDPlayer cdPlayer() {
- return new CDPlayer(compactDisc());
- }
- }
- @Configuration
- public class CDPlayerConfig {
- @Bean
- public CompactDisc compactDisc() {
- return new SgtPeppers();
- }
- @Bean
- public CDPlayer cdPlayer() {
- return new CDPlayer(compactDisc());
- }
- @Bean
- public CDPlayer anotherCdPlayer() {
- return new CDPlayer(compactDisc());
- }
- }
- @Bean
- public CDPlayer cdPlayer(CompactDisc compactDisc){
- return new CDPlayer(compactDisc);
- }
- @Bean
- public CDPlayer cdPlayer(CompactDisc compactDisc){
- CDPlayer cdPlayer=new CDPlayer(compactDisc);
- cdPlayer.setCompactDisc(compactDisc);
- return cdPlayer;
- }
- <?xml version="1.0" encoding="UTF-8" ?>
- <beans xmlns="http://www.springframework.org/schema/beans" ; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- ; xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd" ;>
- <!--声明bean,构造器注入了compactDisc对象-->
- <bean id="cdPlayer" class="cn.czg.bean.CDPlayer">
- <constructor-arg ref="compactDisc" />
- </bean>
- <!--声明compactDisc的实例-->
- <bean id="compactDisc" class="cn.czg.bean.SgtPeppers" />
- </beans>
- @Configuration
- public class CDConfig {
- @Bean
- public CompactDisc compactDisc(){
- return new Sgtpapers();
- }
- }
- @Configuration
- @ComponentScan
- @Import(CDConfig.class)
- public class CDPlayerConfig {
- @Bean
- public CDPlayer compactDisc(CompactDisc compactDisc){
- return new CDPlayer(compactDisc);
- }
- }
- @Configuration@Import({
- CDConfig.class,
- CDPlayerConfig.class
- }) public class SoundSystemConfig {}
- public class BlankDisc implements CompactDisc {
- private String title;
- private String artist;
- private List < String > tracks;
- public BlankDisc(String title, String artist, List < String > tracks) {
- this.title = title;
- this.artist = artist;
- this.tracks = tracks;
- }
- public void play() {
- System.out.println("Playing " + title + " by " + artist);
- for (String track: tracks) {
- System.out.println("-Track: " + track);
- }
- }
- }
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans";
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:c="http://www.springframework.org/schema/c";
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd";>
- <bean id="blankDisc" class="cn.czg.soundsystem.BlankDisc"
- c:_0="Sgt.Paper's lonely Hearts Club Blank"
- c:_1="The Beatles">
- <constructor-arg>
- <list>
- <value>Sgt.Paper's lonely Hearts Club Blank</value>
- <value>Hgsd oijdasfjsa oiasf </value>
- <value>sdfq sgtfq t hyt</value>
- <value>sdfq sgtfq t hytsdarf</value>
- </list>
- </constructor-arg>
- </bean>
- </beans>
- @Configuration
- @ComponentScan
- @Import(CDConfig.class)
- @ImportResource("classpath:applicationContext.xml")
- public class CDPlayerConfig {
- @Bean
- public CDPlayer compactDisc(CompactDisc compactDisc){
- return new CDPlayer(compactDisc);
- }
- }
来源: http://www.bubuko.com/infodetail-2454002.html