Spring——装配Bean 02

本文介绍了Spring框架中Bean的多种装配方式,包括自动装配、自动检测、注解装配等,并详细阐述了不同装配方式的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值