Spring——自动化装配Bean(一) 一、创建 CompactDisc接口和SgetPeppers实现类二、启用spring组件扫描三、编写测试类,并运行 四、补充说明

  • 2019 年 10 月 5 日
  • 筆記

一、创建 CompactDisc接口和SgetPeppers实现类

  CompactDisc接口方法为播放。SgtPeppers实现CompactDisc接口。

1 package soundsystem;  2  3 public interface CompactDisc {  4   void play();  5  6 }
 1 package soundsystem;   2   3 import org.springframework.stereotype.Component;   4 //component为spring中bean扫描标识   5 @Component   6 public class SgtPeppers implements CompactDisc {   7   8   private String title = "歌德";   9   private String artist = "gede";  10  11   public void play() {  12     System.out.println("Playing " + title + " by " + artist);  13   }  14  15 }

二、启用spring组件扫描

  1、通过java配置启用

    添加 @Configuration @ComponentScan 两个注解即可。

【注】使用ComponentScan时,若配置文件和bean在同一个包,省略基础包备注也可以。

1 package soundsystem;  2 import org.springframework.context.annotation.ComponentScan;  3 import org.springframework.context.annotation.Configuration;  4  5 @Configuration  6 @ComponentScan("soundsystem")  7 public class JavaConfig {  8  9 }

  2、通过xml配置启用:<context:component-scan base-package="soundsystem"></context:component-scan> 如果没有自动提示或者报错,在namespace中添加context配置

<?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:p="http://www.springframework.org/schema/p"      xmlns:context="http://www.springframework.org/schema/context"      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">        <context:component-scan base-package="soundsystem"></context:component-scan>    </beans>

三、编写测试类,并运行

  1、创建test包,分别通过java配置和xnl配置实现测试

    java配置为:AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(soundsystem.JavaConfig.class);

    xml配置为:ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");

 1 package test;   2   3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;   4 import org.springframework.context.support.ClassPathXmlApplicationContext;   5 import soundsystem.CompactDisc;   6 import soundsystem.SgtPeppers;   7   8 public class Test {   9     public static void main(String[] args) {  10     //基于java类中配置上下文  11     //AnnotationConfigApplicationContext context =  12             new AnnotationConfigApplicationContext(soundsystem.JavaConfig.class);  13     //基于xml配置上下文  14     ClassPathXmlApplicationContext context =  15             new ClassPathXmlApplicationContext("applicationContext.xml");  16  17     CompactDisc cd=context.getBean(SgtPeppers.class);  18     cd.play();  19     }  20 }

四、补充说明

  1、spring中设置bean的id有两种方式,一是用户给出,二是系统自己生成默认id(默认将类名首字母变成小写作为bean的id)。

  用户常用指定id方法为:

@Component("id")  //也可以使用named属性  @Named(“id”)

  2、关于组件扫描的基础包,上面提到部分,指定单个基础包,当有多个基础包需要扫描时使用basePackages属性。

1 @ComponentScan(basePackages={"soundsystem","test"})

  3、添加@Autowired注解实现自动装配。添加接口MediaPlayer和实现类CDPlayer。修改Test测试类

1 package soundsystem;  2 public interface MediaPlayer {  3   void play();  4  5 }
package soundsystem;    import org.springframework.beans.factory.annotation.Autowired;    public class CDPlayer implements MediaPlayer {        private CompactDisc cd;        @Autowired        public CDPlayer(CompactDisc cd) {          this.cd = cd;        }        public void play() {          cd.play();        }  }
 1 public class Test {   2     public static void main(String[] args) {   3     //基于java类中配置上下文   4     //AnnotationConfigApplicationContext context =   5             new AnnotationConfigApplicationContext(soundsystem.JavaConfig.class);   6     //基于xml配置上下文   7     ClassPathXmlApplicationContext context =   8             new ClassPathXmlApplicationContext("applicationContext.xml");   9     CompactDisc cd=context.getBean(SgtPeppers.class);  10     cd.play();  11     MediaPlayer player=context.getBean(CDPlayer.class);  12     player.play();  13  14     }  15 }

  4、备注CDPlayer重写构造方法,通过Autowired自动添加构造方法CD对象,调用CD播放。