Spring------自动化装配Bean(一)

时间:2021-01-22 19:09:16

一、创建 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播放。