前言
在spring中,对象无需自己负责查找或创建与其关联的其他对象。相反,容器负责把需要相互协作的对象引用赋予各个对象,例如一个消费系统需要信誉证件,但它不需要自己创建,它只负责自己两手空空,而容器就赋予它一个信用卡认证组件。
通常,我们将创建应用对象间相互协作关系的行为称为装配。这也是依赖注入的本质。
一:声明bean
首先我们假想一个选秀场景,该bean为一个表演接口
public interface Performe {
public void perform();
}
很显然我们需要一些参赛者,而这些参赛者就需要spring帮我们创建了
二:创建spring配置
Spring是一个基于容器的框架,但是如果我们不对他进行任何配置,那么它就相当于一个空框架,一般情况下有采用XML或者注解式声明,这里都采用xml形式。
三:声明一个简单的bean
这次表演者可以使各种各样的人,首先是一个杂技师。
主要打印出杂技师扔了多少块Bigbang;
接下来在spring中配置bean,
这是一个最简单的声明格式
接下来就是加载spring上下文,进行测试
|
|
ApplicaionContextUtil.xml
|
|
测试结果:
it is 5
四:通过构造器注入
有时候我们需要通过构造方法进行注入
因为Juggle有一个代参和无参构造函数,默认不配置constructor-arg则是默认构造函数,相反则是代参构造函数,
构造器注入对象引用
上面是注入的基本类型,如果是一个对象了?
在Juggler类中增加如下代码
其中helloworld为入门时的程序
接下来就是配置文件
其中ref为注入另一个bean的id
测试结果:
it is 5
it is hello world
五:bean的作用域
所有的spring bean默认都是单例,即它总是返回同一个bean实例,通过在bean中的scope属性进行设置,一般有如下属性
Singleton 在每一个spring容器中,一个bean定义只对应一个对象实例(默认)
Prototype 允许bean的定义可以被实例化任意次(每次调用都创建一个实例)
另外还有request,session,global-session,一般只用前两者
测试代码:
当采用默认scope时,测试结果为true
当进行如下修改时
测试结果为false
另外在我们初始化和销毁bean时,需要在bean中配置
其中sayhello与saybyb都是该类中方法,当在调用该bean之前,调用init-method,而在该bean销毁前,即生命周期结束前实现destroy-method,
六:注入bean属性
通常,javabean的属性时私有的,同时拥有一组set与get方法取出该属性,spring可以借助set配置属性的值
注意,这里和利用构造器的注入差不多
如注入简单值
引用其他bean
其中name中的值是该bean中的属性,名字要一致,而ref是该配置文件中的其他bean
七:装配集合
前面我们都是介绍单个对象的装配,对于复合类型该如何装配了
不妨模拟一个案例
首相是一个Student类
然后是School类,主要有的属性为集合,首先是list
配置的bean
简要说明一下,这里注入同一个类的不同bean,用于装入集合
然后是配置school
一般格式如下,属性下,配置和要引入的bean
测试代码
测试结果:
helloworld
Set集合装配
首先在school类中加入如下属性
配置文件,添加如下:
对应测试代码:
这里通过迭代器取出对象
测试结果:
hello
world
Map集合装配
首先在school中添加如下属性:
配置文件,添加如下
其中,key为map的索引值,而value-ref为引用的bean
测试代码:
测试结果:
helloworld