SpringIOC02_3

自定义类型赋值

Person类

public class Person {
	
	//基本类型直接使用
	//<property name="lastName" value="小花"></property>自动的进行类型转换;
	private String lastName = "小明";
	private Integer age;
	private String gender;
	private String email;
	private Double salary;
	
	private Car car;
	private List<Book> books;
	private Map<String, Object> maps;
	private Properties properties;
	//xxxxx

	

Spring为Bean中的自定义类型的属性赋值有两种情况,如为Person里面的自定义类型(基本类型不行,如Integer,String)的属性赋值

第一种是手动赋值

<bean id="car" class="com.atguigu.bean.Car">
	<property name="carName" value="宝马"></property>
	<property name="color" value="白色"></property>
</bean>
//为Person的car属性赋值
<bean id="person" class="com.atguigu.bean.Person" >
		<property name="car" ref="car"></property>
</bean>

第二种是自动赋值(自动装配):

仅限于对自定义类型的属性有效,这里测试的是Person的Car car 属性自动赋值

  1. autowire=“default/no”:不自动装配;不自动为car属性赋值
  2. autowire=“byName”:按照名字;
	private Car car;
1)、以属性名(car)作为id去容器中找到这个组件,给他赋值;如果找不到就装配null;
    形如car = ioc.getBean("car");
  1. autowire=“byType”:
private Car car;
1)、以属性的类型作为查找依据去容器中找到这个组件;如果容器中有多个这葛类型的组件,报错;
		NoUniqueBeanDefinitionException: 
		No qualifying bean of type [com.atguigu.bean.Car] is defined: 
		expected single matching bean but found 2: car01,car02
2)、没找到呢?装配null
		car = ioc.getBean(Car.class);
  1. autowire=“constructor”:
public Person(Car car) 
		按照构造器进行赋值;
		1)、先按照有参构造器参数的类型进行装配(成功就赋值);没有就直接为组件装配null即可。
		2)、如果按照类型找到了多个;参数的名作为id继续匹配;找到就装配;找不到就null;
		3)、不会报错;

自动赋值(测试为Person中的list属性赋值)

// 按照类型自动装配,因为xml中定义了多个Book,所以直接用上了,这里不会像属性Car那样按照类型装配时,遇到xml中定义多个Car的Bean就报错
<bean id="person" class="com.atguigu.bean.Person" autowire="byType">
</bean>
//List<Book> books;容器可以把容器中的所有book封装list赋值给这个属性 
<bean id="book01" class="com.atguigu.bean.Book">
	<property name="bookName" value="book1"></property>
</bean>
<bean id="book02" class="com.atguigu.bean.Book">
	<property name="bookName" value="book2"></property>
</bean>
<bean id="book03" class="com.atguigu.bean.Book">
	<property name="bookName" value="book3"></property>
</bean>

Spring Expression Language(Spring 表达式语言)

知识点


   在SpEL中使用字面量、
    引用其他bean、
    引用其他bean的某个属性值、
   【 调用非静态方法 调用静态方法、】 使用运算符;都支持

	 <bean id="person04" class="com.atguigu.bean.Person">
	 	<!-- 字面量:${};   #{} -->
	 	<property name="salary" value="#{12345.67*12}"></property>
	 	<!--  引用其他bean的某个属性值、 根据bean的id引用-->
	 	<property name="lastName" value="#{book01.bookName}"></property>
	 	<!--  引用其他bean、 -->
	 	<property name="car" value="#{car}"></property>
	 	<!-- 
		      调用静态方法: UUID.randomUUID().toString();
		      #{T(全类名).静态方法名(1,2)}
		     -->
		 <property name="email" value="#{T(java.util.UUID).randomUUID().toString().substring(0,5)}"></property>
		 <!--   调用非静态方法;  对象.方法名  -->
		 <property name="gender" value="#{book01.getBookName()}"></property>
	 </bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值