• Spring实战系列(二)Bean装配


           Spring容器负责创建应用程序中的Bean,并通过DI(依赖注入)来协调这些对象之间的关系。创建应用组件之间协作的行为通常称为装配。在Spring中,对象无需自己创建或者查找与其所关联的其他对象。

    spring装配方式

    Spring容器负责创建bean,并通过DI来协调对象之间的依赖关系,对于开发而言,需要告诉Spring哪些bean需要创建并且如何将其装配在一起。Spring提供如下三种主要的装配方式:

    • XML中进行显式的配置
    • 在java中进行显式的配置
    • 隐式的进行bean发现机制以及自动装配

    1. 自动化装配bean

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

    •  组件扫描:Spring会自动发现应用上下文中所创建的bean
    •  自动装配:Spring自动满足bean之间的依赖

       下面通过案例说明组件扫描和装配。

       接口:

    1. package com.spring.demo;
    2. /**
    3. * animal
    4. */
    5. public interface Animal {
    6. /**
    7. * eat
    8. */
    9. void eat();
    10. }

      Animal接口的实现类:

    1. package com.spring.demo;
    2. import org.springframework.stereotype.Component;
    3. @Component
    4. public class Cat implements Animal{
    5. @Override
    6. public void eat() {
    7. System.out.println(" cat is eating !");
    8. }
    9. }

      实现类中使用了@Component注解,表明该类会作为主键类,并告知spring要为这个类创建bean,不过,组件扫描默认是不启动的,需要显示的配置,并去寻找带有@Component注解的类,并创建bean。

      可使用@ComponentScan注解开启扫描。当@ComponentScan没有配置参数的时候,默认扫当前配置类相同的包,因此Spring将会扫描这个包以及其子包,查找带有@ComponentScan注解的类。

    1. import org.springframework.context.annotation.ComponentScan;
    2. import org.springframework.context.annotation.Configuration;
    3. @Configuration
    4. @ComponentScan
    5. public class AnimalConfig {
    6. }

     @ComponentScan 也可用XML配置,等同于

    <context:component-scan base-package = "com.test">

     下面使用junit进行单元测试:

    1. @RunWith(SpringJUnit4ClassRunner.class)
    2. @ContextConfiguration(classes = AnimalConfig.class)
    3. public class AnimalTest {
    4. @Autowired
    5. private Cat cat;
    6. @Test
    7. public void catNotBeNull(){
    8. assertNotNull(cat);
    9. cat.eat();
    10. }
    11. }

    这个bean会被注册进来。

    AnimalTest 使用了spring的SpringJUnit4ClassRunner,以便在测试开始的时候自动创建spring的应用上下文,@RunWith就是一个运行器,让测试运行于Spring环境。@ContextConfiguration注解会告诉加载哪些注解,可以是类也可以是配置信息路径。

    以上已测试完成组件扫描

  • 相关阅读:
    约束的概念和分类(包含外键约束)
    iMX8 secure boot AHAB调试
    Springboot发送邮件
    rust文件读写
    Linux 权限系统
    Linux内核互斥技术1
    一文带你深入理解【Java基础】· 常用类(上)字符串相关类
    Docker学习笔记
    我的 Kafka 旅程 - Linux下的安装 & 基础命令
    安装Java (JDK16)
  • 原文地址:https://blog.csdn.net/m0_37479246/article/details/125492645