Spring4 学习笔记(一)--装配Bean

在Spring中装配Bean是学习Spring的第一步,也是理解依赖注入(DI)很好的例子。装配(wiring)指的是创建应用对象之间协作关系的行为,对于Java开发者而言,装配并不是一个陌生的概念,只是我们没有意识到自己所作的事就是装配,举个栗子:

# 1. 已知有一个工具接口
public interface Tool {
    void use();
}
# 2. 这个接口有一个实现类
public class FirstTool implements Tool {
    public void use() {
    }
}
# 3. 这个实现类被Persion这个类所使用
public class Persion {

    private FirstTool firstTool;

    public Persion() {
        this.firstTool = new FirstTool();   #这就是装配
    }

    void work(){
        firstTool.use();
    }
}

一、文章目录结构

  • 自动化装配Bean
  • JavaConfig装配Bean

在开始之前我们先约定一下所有的代码均在chapter2这个包下

二、自动化装配Bean

Spring中通过组件扫描(Component Scanning)和自动装配(Autowiring)来实现自动化装配,完成自动化装配Bean我们只需要
简单的几步即可

2.1 定义及扫描Bean

将一个普通的类定义为可以被发现的Bean只需要一个注解@Component即可,如上面的Persion类:

@Component
public class Persion {

    private FirstTool firstTool;

    public Persion() {
        this.firstTool = new FirstTool();   #这就是装配
    }

    void work(){
        firstTool.use();
    }
}

如上即完成了将Persion定义为了一个可被发现的Bean,但是Spring中默认是没有开启Bean的扫描的,因此还需要我们开启Bean的扫描,开启扫面在Spring中有两种方式可以实现:

1. 可以单独定义一个配置类:
@Configuration
@ComponentScan
public class BeanScanningConfig {
}

在这个配置类中我们使用了@ComponentScan这个注解开启Bean的扫描,注意:默认只扫描这个配置类所在包及其子包里的所有Bean@Configuration即将这个类声明为一个配置类

2. 在xml文件中开启扫描:



  


在xml文件中我们通过元素即可开启Bean的扫描,并通过该元素的base-package属性指定了要扫描的包

2.2 自动装配Bean

Spring中可以自动帮我们完成文章开头实例的例子中的firstTool对象的注入,也只需要一个注解即可完成:

@Component
public class Persion {

    @Autowired
    private FirstTool firstTool;
    
    void work(){
        firstTool.use();
    }
}

只需要使用@Autowired这个注解标识我们需要注入的对象,Spring就会帮我们完成这个对象的注入

2.3 测试一下自动装配Bean

我们可以测试一下上面的自动装配是否真的生效了:

import chapter2.impl.FirstTool;
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)  //用于加载Spring的应用上下文,Bean的创建依赖应用上下文
@ContextConfiguration(classes = BeanScanningConfig.class)  // 要到BeanScanningConfig中去加载配置
public class AutowiringTest {

    @Autowired
    private FirstTool firstTool;

    @Test
    public void work(){
        assert null != firstTool;
    }
}

三、JavaConfig装配Bean

尽管自动装配能够帮我们完成大多数的Bean的装配,但是如果我们要使用其他第三方库的时候,自动装配就行不通了,因为我们无法给第三方库去添加Spring的注解,此时只能通过手动装配Bean的方式了,手动装配Bean又有两种方式,我们先看看优先推荐使用的JavaConfig装配Bean方式:

3.1 定义一个配置类专门来定义Bean
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeansConfig {
}

我们通过@Configuration这个注解来声明这是个配置类

3.2 定义Bean
import chapter2.impl.FirstTool;
import chapter2.impl.Persion;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeansConfig {

    @Bean
    public FirstTool firstTool(){
        return new FirstTool();
    }
}

我们通过@Bean这个注解来声明一个Bean

你可能感兴趣的:(Spring4 学习笔记(一)--装配Bean)