1.Spring容器负责把相互协作的对象引用赋予各个对象,创建应用对象之间的协作关系的行为被称为装配,
这也是依赖注入的本质。
2.所谓bean,相当于定义了一个组件,这个组件是用于实现某个功能的。这里所定义的bean就是相当于给
你一个简洁方便的方法来调度这个组件实现你要完成的功能。它是java的class,符合两个条件,首先有无
参构造函数,其次为成员编写了set get方法。
3.可以通过构造器注入对象引用,也可以通过工厂方法构建bean
4.Bean的作用域
a.singleton 在每个Spring容器中,一个bean定义只有一个对象实例
b.prototype 每次调用都创建一个实例
c.request 在一次http请求中,每个Bean定义对应一个实例,该作用域仅在Spring MVC中有效
d.session 在一个HTTP Session中,每个session对应一个实例
e.global-session 在一个全局的HTTP Session中,每个Bean定义对应一个实例
5.初始化和销毁bean,可在xml中对每个bean进行配置,当很多bean都拥有相同的名字的初始方法和销毁
方法时,可直接使用default-init-method和default-destroy-method
6.注入bean的属性
通常bean的属性是私有的,同时拥有一组存取器方法,以setXXX和getXXX形式存在,Spring可借助属性的
set方法来配置属性的值,以实现setter方法的注入。
7.注入简单值
在Spring中我们可以使用<property>元素来配置bean的属性,<property>在许多方面都与<constructor-arg>
类似,只不过一个是通过构造参数来注入值,另一个是通过调用属性的setter方法来注入值。
8.注入引用
注入简单的值和注入引用都是通过<property>,只不过注入简单值是通过name value来注入,而注入引用通过
name ref来实现。
://Spring提倡面向接口编程,面向接口编程与依赖注入协作实现了松散耦合。
9.内部类
内部类对应内部bean,即可以通过setter注入,又可以通过构造注入
setter注入
<property name=“instrument">
<bean class=“org.springframework.springidol.Saxphpne/>
</property>
构造注入
<constructor-arg>
<bean class=“org.springframework.springidol.Saxphpne/>
</constructor-arg>
//内部bean,定义内部bean可以实现对某个变量的私有
10.使用Spring的命名空间p装配属性(更简洁)
<bean id=“kenny” class= “com.springinaction.springidol.Instrumentalist"
p:song = “Jingle Bells"
p:instrument-ref = “saxophone">
</bean>
11.装配集合
装配list
<property name=“instruments">
<list>
<ref bean=“guitar”/>
<ref bean=“cymbal”/>
</list>
</prpperty>
装配set同理
装配map
<property name = “instruments">
<map>
<entry key=“GUITAR” value-ref=“guitar”/>
<entry key=“CYMBAL” value-ref=“cymbal”/>
</map>
</property>
装配Properties集合
<property name = “instruments”>
<props>
<prop key=“GUITAR”>STRUM STRUM</prop>
<prop key=“CYMBAL”>CRASH CRASH</prop>
<props>
</property>
12.即可以通过xml装配bean,又可以通过SpEL装配bean
SpEL的首要目标是是通过计算获得某个值。