spring学习笔记-IOC容器中的自动装配和spEL表达式

1.使用autowire属性为自定义对象进行自动赋值

我们可以在IOC容器中,使用autowire属性为bean中的引用数据类型进行自动赋值(也就是我们注册到IOC中的自定义对象,基本数据类型因为是要给定具体的值所以直接赋值就好了)。
autowire分别有5个属性:default,no,byName,byType,constructor,采用不同的检索规则为对象赋值

1. autowire="byName"通过属性名称在IOC容器中匹配id对应的bean对象
当User中有一个Organization类型的org时,并且Organization已经注入到IOC容器中,我们就可以使用byName来进行自动装配了
在这里插入图片描述
在这里插入图片描述

自动装配时属性名和id的匹配是以当前bean对象中的为准,也就是说当IOC容器中的Organization的bean对象id为‘organization’时,是无法自动赋值的 ,因为跟user中的属性名不一致
在这里插入图片描述

2. autowire="byType"通过类型在IOC容器中匹配类型对应的bean对象
所以当我们无法保证当前bean中的属性名和IOC容器中的对象id一致时,就可以使用byType进行自动装配
在这里插入图片描述

如果当前容器中有两个以上相同类型的对象时,会报错: org.springframework.beans.factory.NoUniqueBeanDefinitionException

3. autowire="constructor"
constructor是使用构造器进行赋值,这时spring会先根据类型赋值,如果IOC容器中没有对应类型的对象则停止赋值,如果有两个以上相同类型的值则根据属性名称匹配,没有则停止赋值,所以始终都不会报错
在这里插入图片描述

  1. 使用constructor属性首先需要保证在当前对象的类中有对应的有参构造器
  2. 有参构造器的形参必须全部存在于IOC容器中,构造器才会被调用

4. autowire="default/no"不进行自动装配

2.spEL表达式

基本语法:#{表达式},spEL表达式的目的和EL表达式的目的是一样的,都是为了我们更加方便的获取对象
1.调用IOC容器中其他bean对象

<bean id="user" class="com.hao.spring.user.User">
    <property name="org" value="#{organization01}"></property>
</bean>

在这里插入图片描述
2.调用IOC容器中其他bean对象的属性

<bean id="user" class="com.hao.spring.user.User" autowire="constructor">
        <property name="userName"  value="#{organization01.orgName}"></property>
</bean>

在这里插入图片描述

3.做基本的算术运算

<bean id="user" class="com.hao.spring.user.User" autowire="constructor"> 
        <property name="age" value="#{2*8}"></property>
</bean>

在这里插入图片描述

4.调用动态方法

<bean id="user" class="com.hao.spring.user.User" autowire="constructor"> 
    <property name="userName"  value="#{rule.getRuleName()}"></property>
</bean>

在这里插入图片描述

调用动态方法时,和我们用非静态工厂方法创建bean对象一样,需要先将要调用方法的对象注入IOC中

5.调用静态方法
静态方法调用语法稍有不同:#{T(className).method(arg1,arg2)}

<bean id="user" class="com.hao.spring.user.User" > 
    <property name="userName" 
value="#{T(com.hao.spring.factory.StaticFactory).getBean('qianghao',13,'男').getUserName()}"></property>
    </bean>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值