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();
}
 package soundsystem;

 import org.springframework.stereotype.Component;

 //这个简单的注解会标明该类为组件类
//并告知Spring要为这个类创建bean
@Component
public class CDTest1 implements CD { private String title = "十一月的肖邦";
private String artist = "JayZhou"; public void play() {
System.out.println("正在播放:" + title + ",由" + artist + "演唱");
}
}

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

创建类CDPlayerConfig:

 package soundsystem;

 import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration
@ComponentScan
public class CDPlayaerConfig { }

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

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

 package soundsystem;

 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; //用于在测试开始时自动创建Spring上下文
@RunWith(SpringJUnit4ClassRunner.class)
//告诉上下文需要在CDPlayerConfig中加载配置
@ContextConfiguration(classes = { CDPlayerConfig.class })
public class CDPlayerTest {
//自动装配
@Autowired
private CD cd; @Test
public void test() {
cd.play();
}
}

测试结果:

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

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

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

Sping装配之——自动装配的更多相关文章

  1. Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)

    1.生命周期 **Spring容器的 bean **的生命周期: 1.1 默认生命周期 1.1.1 生命周期 调用构造方法,创建实例对象: set方法,给实例对象赋值: init 初始化方法 初始化对 ...

  2. spring装配---处理自动装配的歧义性

    一.歧义性 当我们使用spring的注解进行自动装配bean时,如果不仅有一个bean能够匹配结果的话,会抛出NoUniqueBeanDefinitionException: 例如本例中 当sprin ...

  3. java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)

    在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...

  4. 装配SpringBean(五)--注解装配之自动装配

    在spring ioc容器中,spring要先完成bean的定义和生成,然后需要需要注入的资源,在上一篇的扫描组件中就是这样实现的.而自动装配中我们只需要定义和生成一个bean,发现bean的过程将由 ...

  5. spring实战二之Bean的自动装配(非注解方式)

    Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...

  6. Spring入门(5)-自动装配Bean属性

    Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...

  7. Spring学习笔记--自动装配Bean属性

    Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...

  8. 一步步从Spring Framework装配掌握SpringBoot自动装配

    目录 Spring Framework模式注解 Spring Framework@Enable模块装配 Spring Framework条件装配 SpringBoot 自动装配 本章总结 Spring ...

  9. Spring Bean 注入 1 - 构造方法注入,属性注入,自动装配

    1.代码结构图 xxx 2.bean代码 package com.xxx.bean; /** * Created with IntelliJ IDEA. * User: zhenwei.liu * D ...

随机推荐

  1. JavaScript使用正則表達式

    2.0 简单介绍 正則表達式是能够用来查找与给定模式匹配的文本的搜索模式.比如,在上一章中,我们在一个较长的字符串中查找子字符串Cookbook: var testValue = "This ...

  2. cordova windows环境配置

    * 安装Cordova 1.cordova是利用nodeJS进行管理,所以要先下载nodeJS. 2. 打开命令窗口,输入:“npm install -g cordova”即可安装 3. 安装后,输入 ...

  3. 20170623_oracle基础知识_常见问题

    1 如何配置网络服务?两种连接 Oracle 工具? 1) 打开Net Manager 2) 选择服务命名,点击“+ ”号 3 ) 网络服务名:  remote协议:tcp/ip 主机名:ip地址 端 ...

  4. YTU 2750: 猜算式

    2750: 猜算式 时间限制: 1 Sec  内存限制: 128 MB  Special Judge 提交: 22  解决: 1 题目描述 看下面的算式: □□ x □□ = □□ x □□□ 它表示 ...

  5. [BZOJ 3132] 上帝造题的七分钟

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3132 [算法] 二维树状数组 [代码] #include<bits/stdc+ ...

  6. tyvj2054 四叶草魔杖——连通块 & 状压DP

    题目:http://www.joyoi.cn/problem/tyvj-2054 把点分成几个连通块,和为0的几个点放在一块,在块内跑最小生成树作为这个块的代价: 然后状压DP,组成全集的最小代价就是 ...

  7. bzoj1061&&bzoj3256

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 单纯形... 先开始我不知道对偶,看着代码不知所措,并不能懂他们写的是什么... 单纯形的标准 ...

  8. 网页分享URL

    <a href="tencent://Message/?Uin=QQ号码&Site=qq联系">点击联系</a> 1.新浪微博:<a href ...

  9. springMVC与freemarker整合

    准备好的环境:Maven工程整合好了ssm,即spring+springMVC+mybatis.接下来准备将springMVC与freemarker整合,以html文件为模板. 一,加入freemar ...

  10. 2243: [SDOI2011]染色(树链剖分+线段树)

    2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 8400  Solved: 3150[Submit][Status ...