Spring——装配Bean 02
- 自动装配:有助于减少甚至消除配置元素和元素,让Spring自动识别如何装配Bean的依赖关系
- 自动检测:比自动装配更进一步,让Spring能够自动识别那些类需要被装配成Spring Bean,从而减少对元素的使用
4种类型的自动装配
- byName:把与Bean的属性具有相同名字(或者id)的其他Bean自动装配到Bean的对应属性中,如果没有跟属性的名字相匹配的Bean,则该属性不进行装配
- byType:把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中。如果没有跟属性的类型相匹配的Bean,则该属性不进行装配
- constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean的构造器的对应入参中。
- autodetect:首先尝试使用constructor进行自动装配、如果失败,再尝试使用byType进行自动装配
byName自动装配
<bean id="kenny2" class="com.springinaction.springidol.Instrumentalist" autowire="byName">
<property name="song" value="Jingle Bells" />
</bean>
byType自动装配
<bean id="duke" class="com.springinaction.springidol.PoeticJuggler" autowire="byType" />
constructor自动装配
<bean id="kenny2" class="com.springinaction.springidol.Instrumentalist" autowire="constructor">
</bean>
autodetect自动装配
<bean id="duke" class="com.springinaction.springidol.PoeticJuggler" autowire="autodetect" />
使用注解装配
@Autowired注解
@Autowired private Instrument instrument;
@Qualifier创建自定义的限定器
@Inject注解
@Inject private Instrument instrument;
@Name创建自定义的限定器
- @Resource注解
自动检测Bean
- @Component:通用的构造型注解,标识该类为Spring组件
- @Controller:标识将该类定义为SpringMVC controller
- @Repository:标识将该类定义为数据仓库
- @Service:标识将该类定义为服务
装配p
<bean id="hank" class="com.springinaction.springidol.OneManBand" p:song="Jingle Bells" p:instrument-ref="saxophone">
</bean>
装配List
<bean id="hank" class="com.springinaction.springidol.OneManBand">
<property name="instruments">
<list>
<ref bean="guitar"/>
<ref bean="cymbal"/>
<ref bean="harmonica"/>
</list>
</property>
</bean>
装配Set集合
<bean id="hank" class="com.springinaction.springidol.OneManBand">
<property name="instruments">
<set>
<ref bean="guitar"/>
<ref bean="cymbal"/>
<ref bean="harmonica"/>
</set>
</property>
</bean>
装配Map集合
<bean id="hank" class="com.springinaction.springidol.OneManBand">
<property name="instruments">
<map>
<entry key="GUITAR" value-ref="guitar"/>
<entry key="CYMBAL" value-ref="cymbal"/>
<entry key="HARMONICA" value-ref="harmonica"/>
</map>
</property>
</bean>
装配Properties集合
<bean id="hank" class="com.springinaction.springidol.OneManBand">
<property name="instruments">
<props>
<prop key="GUITAR">STRUM STRUM STRUM</prop>
<prop key="CYMBAL">CYMBAL CYMBAL CYMBAL</prop>
<prop key="HARMONICA">HUM HUM HUM</prop>
</props>
</property>
</bean>
作用域 | 定义 |
---|---|
singleton | 在每一个Spring容器中,一个Bean定义只有一个对象实例 |
prototype | 允许Bean的定义可以被实例化任意次(每次调用都创建一个实例) |
request | 在一次Http请求中,每个Bean定义对应一个实例,该作用域仅在基于Web的Spring上下文(例如Spring MVC)中才有效 |
session | 在一个Http Session中,每个Bean定义对应一个实例、该作用域仅在基于Web的Spring上下文(例如Spring MVC)中才有效 |
global-session | 在一个全局Http Session中,每个Bean定义对应一个实例。该作用域仅在Porlet上下文中才有效 |
Spring有关单例的概念仅限于Spring上下文的范围内,并不像真正的单例,类加载器中保证只有一个实例。
表达式装配
SpEL表达式
<property name="instrument" value="#{saxophone}"/>
SpEL运算符
运算符类型 | 运算符 |
---|---|
算术运算 | +、-、*、/、%、^ |
关系运算 | <、>、==、<=、>=、lt、gt、eq、le、ge |
逻辑运算 | and、or、not、 |
条件运算 | ?: |
正则表达式 | matches |