13 基于XML的自动装配(自定义类型的自动赋值)

​ javaBean(基本类型)

(自定义类型的属性是一个对象,这个对象在容器中可能存在)

1
2
3
4
5
6
<bean id="car" class="com.runsstudio.bean.Car">
<property name="carName" value="1"></property>
</bean>
<bean id="person" class="com.runsstudio.bean.Person">
<property name="car" ref="car"></property>
</bean>
1
2
Person bean = ioc.getBean(Person.class);
System.out.println(bean);

输出:

Person{name=’null’, email=’null’, QQ=0, gender=’null’, flag=false, car=Car{carName=’1’, price=null}, carList=null, maps=null, properties=null}

但是这里还需要一个

我们有时候不想写这么多,希望来一个自动装配,

所以有一个autowire属性

1
2
3
4
5
autowire="default"表示不自动装配
autowire="byName" 通过名字:以属性名(JAVA中的)作为id(XML中的) 去容器中找到这个组件,给他赋值
autowire="byType" 通过类型:以属性类型作为查找依据去容器中找到这个组件,如果容器中有多个该类型的组件会报错:NoUniqueBeanDefinitionException
autowire="constructor" 通过构造器:按照构造器进行赋值:如果在Person中有一个有参构造器为car赋值,则会调用该构造器赋值:先按照参数类型装配,没有就直接为组件装配null即可;如果找到了多个,装配null,参数的名作为id,继续匹配(不管怎样不会报错)

14 SpEL(Spring Expression Language)Spring表达式

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

用#{}来表达

#{12*5}

#{book01.bookname}

#{car}

调用静态方法 #{T(全类名).random().toString()}

调用非静态方法 #{对象.方法名()}

-------------文章已结束~感谢您的阅读-------------
穷且益坚,不堕青云之志。