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();
}
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装配之——自动装配的更多相关文章
- Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)
1.生命周期 **Spring容器的 bean **的生命周期: 1.1 默认生命周期 1.1.1 生命周期 调用构造方法,创建实例对象: set方法,给实例对象赋值: init 初始化方法 初始化对 ...
- spring装配---处理自动装配的歧义性
一.歧义性 当我们使用spring的注解进行自动装配bean时,如果不仅有一个bean能够匹配结果的话,会抛出NoUniqueBeanDefinitionException: 例如本例中 当sprin ...
- java之Spring(IOC)装配Bean(手动装配、自动装配、注解装配)
在上一篇控制反转中我们看到了依靠一个Bean文件来实现对代码的控制,可谓十分便捷,再也不用去实例化对象了,2333~~~ 1.手动装配 <bean id="todo" cla ...
- 装配SpringBean(五)--注解装配之自动装配
在spring ioc容器中,spring要先完成bean的定义和生成,然后需要需要注入的资源,在上一篇的扫描组件中就是这样实现的.而自动装配中我们只需要定义和生成一个bean,发现bean的过程将由 ...
- spring实战二之Bean的自动装配(非注解方式)
Bean的自动装配 自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bea ...
- Spring入门(5)-自动装配Bean属性
Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...
- Spring学习笔记--自动装配Bean属性
Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...
- 一步步从Spring Framework装配掌握SpringBoot自动装配
目录 Spring Framework模式注解 Spring Framework@Enable模块装配 Spring Framework条件装配 SpringBoot 自动装配 本章总结 Spring ...
- Spring Bean 注入 1 - 构造方法注入,属性注入,自动装配
1.代码结构图 xxx 2.bean代码 package com.xxx.bean; /** * Created with IntelliJ IDEA. * User: zhenwei.liu * D ...
随机推荐
- 通用的Adapter
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- HDU 5305(Friends-暴搜)
Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- 机器学习A
订阅地址 : http://blog.csdn.net/lizhe_dashuju/rss/list
- 【Unity】用Shader编程实现3D红心
有些形状,即使没有3D美术设计师提供模型,也能够用代码生成. 对于想保持原创性不想借用他人模型的独立开发人员来说,这无非是一个非常重要的途径. 今天献给大家的是用Shader编程实现的一颗红心,寄托下 ...
- 把TXT GB2312文件转换成TXT UTF8文件
/// <summary> /// 把TXT GB2312文件转换成TXT UTF8文件 /// </summary> /// < ...
- string转date
/*util-->sql*/ java.util.Date utdt; java.sql.Date sqldt =null; SimpleDateFormat simFormat = new S ...
- luogu 3796 【模板】AC自动机(加强版)
我太菜了 棒神%%% #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib ...
- awk数据预处理
{ && $~/192.168/) host_name = $ ;i<NF;++i) { if($i~/192.168/) { split($i, a, "=" ...
- roundabout旋转幻灯
jquery.roundabout.js文件/** * jQuery Roundabout - v2.4.2 * http://fredhq.com/projects/roundabout * * M ...
- canvas做的一个写字板
<!DOCTYPE html><html><head><title>画板实验</title> <meta charset=" ...