美文网首页
自动化扫描与装配Bean

自动化扫描与装配Bean

作者: tingshuo123 | 来源:发表于2018-07-22 17:31 被阅读33次

Sping 从两个角度来实现自动化装配Bean

  • 组件扫描:自动寻找使用了@Component 注解的类,并为其创建Bean
  • 自动装配:为使用了 @Autowired 的构造器、setter 方法、或者属性自动注入需要的Bean

一个 cd 概念

package com.project.chapter02;

public interface CompactDisc {
    
    void play();
}

实现类

package com.project.chapter02;

import org.springframework.stereotype.Component;

/*
 * spring 会自动扫描有 @Component 的类,创建 Bean
 * id 默认为类的首字母小写,如:sgtPeppers
 * 可以通过@Component("id名") 指定
 * 也可以通过 DI 提供的注解 @Named("id名")指定id
 */
@Component
public class SgtPeppers implements CompactDisc {
    
    private String title = "SgtPeppers";
    private String artist = "The Beatles";
    
    @Override
    public void play() {
        System.out.println("Playing " + title + "by" + artist);
    }

}

@Component 这个注解,表明该类是组件类,spring 会为其创建 Bean,id 默认为类的首字母小写,当然也可通过@Component("id名") 指定。

创建配置类

package com.project.chapter02;

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

@Configuration  // 表明这个类是配置类
@ComponentScan(basePackageClasses={CompactDisc.class})  // 自动为包下所有类创建 Bean
public class CDPlayerConfig {
    
}

@Configuration 表明该类是配置类,配置类不应该包含任何业务逻辑,也不因该侵入到其他业务逻辑代码中。
@ComponentScan 指定扫描的包,不写参数默认为配置类所在的只扫描配置类的所在的包及子包下的组件类。

  • @ComponentScan("包名") 指定需要扫描的包
  • @ComponentScan(basePackages = {"包名","包名"}) 指定多个包
  • @ComponentScan(basePackageClasses = {"类名.class","类名.class"}) 设置类所在的包及子包
  • <context:component-scan base-package="包名" /> 在 XML 中配置

测试类

package com.project.chapter02;

import static org.junit.Assert.assertNotNull;

import org.junit.Rule;
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=CDPlayerConfig.class)
public class CDPlayerTest {
    
    @Autowired  // 自动注入
    private CompactDisc cd;
    
    @Test
    public void cdShouldNotBeNull() {
        assertNotNull(cd);  // 断言 cd 不为 null
    }
}

@RunWith(SpringJUnit4ClassRunner.class) 自动创建spring的上下文
@ContextConfiguration(classes=CDPlayerConfig.class) 指定配置类
@Autowired spring 会自动寻找需要的Bean,然后将其注入,如果没有匹配的Bean spring 会抛出一个异常,通过设置@Autowired(required=false)可避免这个异常。有多个匹配也会引发异常。

测试成功。。。

相关文章

  • 装配bean

    三种装配bean方式 第一种:自动化装配bean · 组件扫描(component scanning):Sprin...

  • 《Spring实战》笔记——第二章 装配Bean

    本章主要讲了装配bean的三种方式。 一.自动化装配bean 1.如何实现的。 答:①组件扫描 Ⅰ.在需...

  • Spring装配bean的三种方式

    一.自动化装配bean 1.1 创建可被发现的bean 启用组建扫描 注:@configuration:表明是一个...

  • 第二章 装配bean

    装配:创建应用对象之间协作关系的行为 1、自动化装配bean:(组件扫描+自动装配) 在类中使用注解@compon...

  • Spring装配Bean

    spring三种方式装配bean: 自动化装配bean 借助java来进行bean装配 使用xml进行bean装配...

  • 自动化扫描与装配Bean

    Sping 从两个角度来实现自动化装配Bean 组件扫描:自动寻找使用了@Component 注解的类,并为其创建...

  • Spring之旅(三):Spring 装配

    Bean装配 bean装配有哪几种方式 如何使用javaConfig进行显示装配 如何使用自动化装配 什么是装配 ...

  • 《Spring实战》读书笔记

    组件扫描与自动装配的区别前者创建Bean(@Conponent),后者创建Bean之间的依赖(@AutoWired...

  • 基于Java类配置的Bean的装载

    基于Java类配置的Bean的装配 在大多数情况下,通过组件扫描和自动装配实现Spring的自动化配置是更为推荐的...

  • 05 装配bean

    三种方式:1 自动化装配 bean2 通过java代码装配3 通过xml装配

网友评论

      本文标题:自动化扫描与装配Bean

      本文链接:https://www.haomeiwen.com/subject/vftrmftx.html