Spring学习之Spring三种装配机制:(一)自动化装配bean

装配:创建应用组件(对象)之间的协作的行为,这也是Spring依赖注入(DI)的本质。

Spring提供了三种装配机制:
  1. 隐式的自动装配bean;
  2. 通过java代码装配bean(显示);
  3. 通XML中装配bean;

本文只介绍第一种装配方式:自动装配。

在**《Spring实战》**这本书中将自动装配分为了两个部分(组件扫描和自动装配):
组件扫描:Spring会自动发现应用上下文(Spring容器)中所创建的bean;
自动装配:Spring自动满足bean之间的依赖。

我个人对Spring自动装配的简单理解就是通过 注解 的方式来实现Spring自动装配的配置,从而在编译或运行时实现bean的自动装配。因此有几个注解在这里必需掌握。

  • @Component(“cdPlayer”) : 表明该类作为组件类,并告知Spring需要为这个类创建bean,而且会分配一个默认的ID,ID名与类名相同首字母小写。也可以自己设置ID,例如cdPlayer。
  • @ComponentScan (“soundsystem”):该注解用于配置类的配置,默认会扫描与配置类相同的包中带有@Component注解的类,并在Spring中自动为其创建一个bean。
    可以通过 (“soundsystem”)、basePackages属性或basePackagesClasses属性来设置扫描的(一个或多个)基础包。
  • @Configuration:用于定义配置类,被注解的类内部包含有一个或多个被**@Bean**注解的方法。
  • @Bean:该注解一般用于修饰方法,告诉Spring这个方法返回一个对象,该对象注册为Spring应用上下文中的bean。(该注解在通过java程序配置bean的方式中会用到 )
  • @ContextConfiguration(classes=CDPlayerConfiger.class):告诉spring需要在哪个配置类中加载配置;其中classes属性为配置类的(.class),复数形式表示可以有多个配置类。
  • @Autowired:可以对成员变量、方法和构造函数进行标注,根据类型来完成自动装配注入的工作。

以上就是在Spring自动装配的学习中遇到的注解。

下面是自动装配的代码:
jar包
在这里插入图片描述
其中beans、context、core、expression为4个核心包和一个 logging的jar包,这5个包构成最小的基本单元。用这5个包可以编写一个Spring的hello world的程序;
其余的jar包也是本次测试所必须的。

1、创建bean:

//接口
public interface CompactDisc {
    void play();
}

import org.springframework.stereotype.Component;

@Component("firstSpring")   
//表明该类作为组件类,并告知Spring为这个类创建bean, ID:firstSpring
public class SgtPeppers implements CompactDisc {
    private String title = "Sgt.Pepper's Lonely Hearts Club Band";
    private String artist = "The Beatles";
    
    @Override
    public void play() {
        System.out.println("Playing "+title+" by "+artist);
    }
}

2、配置类

@Configuration
@ComponentScan ("soundsystem")   
			// 该注解能够在spring中启用组建的组件扫描,默认会扫描与配置类相同的包
			/ /自动装配,类中可以没有代码。
public class CDPlayerConfiger {

}

3、自动装配

@Component("cdPlayer") //该类也应设置为组件类,以便测试时将bean注入到测试代码中
public class CDPlayer {
    private  CompactDisc cd;

    @Autowired
       //该注解表明Spring创建CDPlayer bean的时候,会通过构造器来实例化,并传入一个CompactDisc类型的bean
    public CDPlayer(CompactDisc cd){
        this.cd = cd;
    }

    public void play() {
        cd.play();
    }
}

4、验证
运行两个@Test方法 ,成功则表明自动装配成功。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=CDPlayerConfiger.class)
public class CDPlayerTest {
    @Rule
    public final StandardOutputStreamLog log = new StandardOutputStreamLog();

    @Autowired // 自动将 CompactDisc 类型的bean对象注入
    private CompactDisc cd;

    @Autowired // 自动将 CDPlayer 类型的bean对象注入
    private CDPlayer player;

    @Test // 测试 属性cd是否为null
    			//不为null则Spring能够发现CompactDisc类,并自动在上下文中将其创建为bean并注入到测试代码中
    public void cdShouldNotBeNull(){
        assertNotNull(cd);
    }

    @Test
    public void play(){
        player.play();
        assertEquals("Playing Sgt.Pepper's Lonely Hearts Club Band" +
                " by The Beatles\r\n",log.getLog());
    }
}

5、在main函数中调用

public class Main {
    public static void main(String args[]){
        //1、创建Spring的IOC容器的上下文对象
        //  这里传入的参数为配置文件的class 文件
        ApplicationContext acx = new AnnotationConfigApplicationContext(CDPlayerConfiger.class);
        //2、从IOC的容器中获取Bean的实例
        CDPlayer cdPlayer = (CDPlayer) acx.getBean("cdPlayer");
        cdPlayer.play();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值