首页 > 代码库 > (七)装配Bean(1)

(七)装配Bean(1)

针对给接口提供哪一个具体的实现,也就是装配哪一种具体的实现bean,在Spring中提供了多种方式,主要包括3种:

  • 一、隐式的bean发现机制和自动装配(自动化装配bean)
  • 二、在Java类中进行显式的配置
  • 三、在XML中进行显式的配置


一、自动化装配Bean

  • 实现方式:
  1. 组件扫描:Spring会自动发现应用上下文所创建的bean
  2. 自动装配:Spring自动满足bean之间的依赖。
  • 原理:通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组件扫描默认是不启动的,需要显式的配置Spring,从而命令Spring去寻找带有(@Component)注解的类,并为其创建bean。
  • 案例一

  • 编写一个接口类 CD.java
package bean;

public interface CD {
    void play();
}
  • 编写接口的实现类 CD1.java
package bean;

import org.springframework.stereotype.Component;

@Component// 该注解表示该类是一个组件类,并且spring会为这个类创建一个bean
public class CD1 implements CD {

    @Override
    public void play() {
        System.out.println("我是CD1");
    }

}
  • CDPlayer.java
package bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("cdPlayer")   //声明这个类为组件类,spring会为这个类创建一个bean,这个bean的id为“cdPlayer”
public class CDPlayer {

    private CD cd;

    @Autowired   //自动装配注解,spring会自动注入一个CD类
    public CDPlayer(CD cd) {
        this.cd = cd;
    }

    public void play() {

        cd.play();
    }

}
  • 编写测试类  Test.java
package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import bean.CDConfig;
import bean.CDPlayer;

public class Test {
    public static void main(String[] args) {
        
        ApplicationContext context=new AnnotationConfigApplicationContext(CDConfig.class);
        CDPlayer cdplayer=(CDPlayer)context.getBean("cdPlayer");
        cdplayer.play(); 
    }
}

结果:

技术分享

 

  •  注意 :

  1.  @Autowired可以用在构造器,属性,任何方法前,spring在初始化bean的时候会尽可能去满足bean的依赖,每个使用了该注解的方法都会执行,但一般注入采用一种就可以。

2.如果没有匹配的bean,那么在上下文创建的时候就会抛异常,为了避免,可将@Autowired的required的属性设为false,但你代码如果没判空,可能会出现空指针。

3.@Autowired默认按类型自动注入,就是说如果,注入的时候根据类型去寻找,找不到抛找不到异常;找到一个则注入;找到多个则再根据名字去找,如果根据名字(字段名)找不到则抛找到多个异常,找到则注入;



 

(七)装配Bean(1)