• Sping装配之——自动装配


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

    • 组件扫描(component scaning):spring会自动发现应用上下文中所创建的bean;
    • 自动装配(autowiring):spring自动满足bean之间的依赖。

    为了阐述组件扫描和装配,我们需要创建几个bean,他们代表一个音响系统中的组件。首先创建一个CD类,Spring会发现它并将其创建为一个bean。然后,会创建一个CDPlayer类,让Spring发现它,并将CD bean注入进来。下面进行代码演示:

    package soundsystem;
    
    //作为接口 定义了CD播放器对一盘CD所能进行的操作
    public interface CD {
        void play();
    }
    View Code
     1 package soundsystem;
     2 
     3 import org.springframework.stereotype.Component;
     4 
     5 //这个简单的注解会标明该类为组件类
     6 //并告知Spring要为这个类创建bean
     7 @Component
     8 public class CDTest1 implements CD {
     9 
    10     private String title = "十一月的肖邦";
    11     private String artist = "JayZhou";
    12 
    13     public void play() {
    14         System.out.println("正在播放:" + title + ",由" + artist + "演唱");
    15     }
    16 }
    View Code

    不过,组件扫描默认是 不启用 的。我们还需要显示配置以下Sping,从而命令他去寻找带有 @Component 注解的类,并为其创建bean。

    创建类CDPlayerConfig:

     1 package soundsystem;
     2 
     3 import org.springframework.context.annotation.ComponentScan;
     4 import org.springframework.context.annotation.Configuration;
     5 
     6 @Configuration
     7 @ComponentScan
     8 public class CDPlayaerConfig {
     9 
    10 }
    View Code

    类CDPlayerConfig是通过JAVA代码定义了Spring的装配规则。后续的博客中会详细介绍该中配置的使用方式。现在,我们只需要观察以下CDPlayerConfig类并没有显示地声明任何bean,只不过是用了@ComponentScan注解,这个注解能够在Spring中启用组件扫描,默认会扫描与该类相同的包下的文件。寻找带有@Component注解的类,并为其创建一个bean.

    最后,测试组件扫描能够发现CD。我们创建一个简单的JUnit测试:

     1 package soundsystem;
     2 
     3 import org.junit.Test;
     4 import org.junit.runner.RunWith;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.test.context.ContextConfiguration;
     7 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
     8 
     9 //用于在测试开始时自动创建Spring上下文
    10 @RunWith(SpringJUnit4ClassRunner.class)
    11 //告诉上下文需要在CDPlayerConfig中加载配置
    12 @ContextConfiguration(classes = { CDPlayerConfig.class })
    13 public class CDPlayerTest {
    14     //自动装配
    15     @Autowired
    16     private CD cd;
    17 
    18     @Test
    19     public void test() {
    20         cd.play();
    21     }
    22 }
    View Code

    测试结果:

    正在播放:十一月的肖邦,由JayZhou演唱

    如果想为组件扫描的bean命名,可以使用该形式:@Component("yourname")

    如果想设置组件扫描的基础包:@ComponentScan(basePackages = "packagename"),  如果是多个包,采用数组形式

  • 相关阅读:
    利用jmeter+JAVA对RPC的单接口(dubbo接口等)进行性能测试
    spring mvc中,直接注入的HttpServletRequst是否安全呢?
    基础篇系列,JAVA的并发包
    撸基础篇系列,JAVA的NIO部分
    1, 本地缓存的实现以及遇到的问题
    python操作mysql数据库之pymysql
    软件测试中常见的一些经典Bug
    做性能测试前需要弄明白的几个知识点
    接口测试常见问题汇总
    用例中四大核心要素的写作规范
  • 原文地址:https://www.cnblogs.com/ustc-anmin/p/10138434.html
Copyright © 2020-2023  润新知