Spring学习(五):自动化装配Bean

1. 引言

在本系列之前的文章中,我们实现了Spring的HelloWorld应用,也通过了解Spring的容器知道了容器的职责是创建程序中的bean并通过依赖注入把协调这些对象之间的关系,但是要创建哪些bean并且如何装配是你需要告诉Spring的,Spring提供了三种主要的装配机制:

  • 在XML中显式配置
  • 在Java中显式配置
  • 隐式的bean发现机制和自动装配

三种方式都可以实现bean的装配,具体使用哪种,看个人喜好。今天讲的是隐式的bean发现机制和自动装配

2. 自动装配概述

Spring主要从两个角度实现自动化装配:

  • 组件扫描: Spring可以自动扫描上下文中的bean
  • 自动装配: Spring能自动满足bean之间的依赖

3. 案例讲解

我们拿生活中比较常见的影碟机例子进行说明,影碟机进行电影放映时候,需要将光盘(CD)放入放映机(CD Player)中,一起来看程序:

3.1 CD接口

cd都有一个通用的功能,就是要能实现播放,即play功能。

package blog.p2;

public interface CD {
    void play();
}
3.2 周杰伦歌曲CD

周杰伦的CD实现了CD的功能,同时标明了特有的作者和歌曲名

package blog.p2;

import org.springframework.stereotype.Component;

@Component
public class JayCD implements CD {

    private String title = "稻香";
    private String artist = "Jay";

    public void play() {
        System.out.println("palying " + title + " by " + artist);
    }

}
3.3 CD放映机

影碟放映机负责将CD装入,进行播放

package blog.p2;

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


@Component
public class CDPlayer {

    private CD cd;

    @Autowired
    public CDPlayer(CD cd) {
        this.cd = cd;
    }

    public void play(){
        cd.play();
    }
}
3.4 Spring配置类

从上面的三个POJO中,我们看到和我们通常写的代码区别仅在于多了一些注解,这儿主要有两个注解:

  • @Component:这个简单的注解表明该类 会作为组件类,并告知Spring要为这个类创建bean。
  • @Autowired:表明当Spring创建CDPlayer bean的时候,会通过这个构造器来进行实例化并且会传入一个CD类型的bean。

当标注好bean及装配方式后,我们要让Spring能扫描到这些注解,主要用到两个注解:

  • @Configuration:标明该类为一个配置类
  • @ComponentScan:组件扫描,可以定义扫描的基础包,如本例中的blog.p2,只要指定了基础包,Spring就会扫描该包及子包下的所有bean,并自动装配。当然ComponentScan中你也可以设置basePackageClasses代替basePackages,basePackageClasses = CDPlayer.class 就是指定CDPlayer所在的包及其子包下所有的bean,当然从basePackageClasses、basePackages的复数形式可以看出,你可以指定多个包或者多个类,如:basePackageClasses = {CDPlayer.class,CD.class},以下是本例配置文件:
package blog.p2;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "blog.p2")
public class Config {}
3.5 测试类
package blog.p2;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = Config.class)
public class App {

    @Autowired
    CDPlayer cdPlayer;

    @Test
    public void test(){
        cdPlayer.play();
    }
}

在测试类中指定配置文件为Config.class,对test方法做单元测试后,输出:

palying 稻香 by Jay

一个自动装配的Spring demo就完成了。

4. 小结

自动装配主要有两个工作要做,一是标记好哪些bean需要创建,二是申明如何处理依赖之间的关系,本讲只是简单做了演示,关于每个注解详细的介绍会在下一讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值