版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011171125/article/details/85162489
Bean的引用
使用property
的ref
属性建立bean之间的引用关系
- 创建一个
Person.java
类,包含一个Car
属性:package com.fafa.spring.beans; public class Person { private String name; private int age; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + "]"; } public Person() { } public Person(String name, int age, Car car) { super(); this.name = name; this.age = age; this.car = car; } }
- 创建一个
person
的Bean:
使用property
的子节点ref
引用了一个上节创建的id为car2
的Bean,注入Person
类中的Car
属性中<bean id="person" class="com.fafa.spring.beans.Person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <!-- 可以使用property 的 ref 属性建立bean之间的引用关系 --> <!-- <property name="car" ref="car2"></property> --> <property name="car"> <ref bean="car2"/> </property> </bean>
- 创建一个
PerosnTest.java
测试类public class PersonTest { ApplicationContext ctx; @Before public void init(){ ctx = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml"); } @Test public void testPerson01(){ Person person = (Person) ctx.getBean("person"); System.out.println(person); } }
- 测试结果,可以看出名为
perosn
的Bean已经成功注入到了Car属性中。
另一种方式是创建一个部的Bean使用
- 创建一个内部的
bean
如下:<bean id="person" class="com.fafa.spring.beans.Person"> <property name="name" value="Tom"></property> <property name="age" value="24"></property> <!-- 可以使用property 的 ref 属性建立bean之间的引用关系 --> <!-- <property name="car" ref="car2"></property> --> <!-- <property name="car"> <ref bean="car2"/> </property> --> <!-- 内部bean,不能被外部引用,只能在内部使用 --> <property name="car"> <bean id="car3" class="com.fafa.spring.beans.Car"> <constructor-arg value="Ford"/> <constructor-arg value="Changan"/> <constructor-arg value="200000" type="double"/> </bean> </property> </bean>
- 此时得到测试结果如下:
注意内部创建的Bean无法被外部引用,它只能在内部使用。
为Bean的引用的属性赋值
- 创建一个
person2
的Bean,如下:<bean id="person2" class="com.fafa.spring.beans.Person"> <constructor-arg value="Jerry"></constructor-arg> <constructor-arg value="25"></constructor-arg> <constructor-arg ref="car2"></constructor-arg> <!-- 为级联属性赋值 .注意:属性需要先初始化后才可以为级联属性赋值,否则会有异常,和Struts2不同--> <property name="car.price" value="310000"></property> </bean>
Person
类中的Car
属性引用了之前创建的id为car2
的Bean,使用<property name="car.price" value="310000"></property>
的方式为car的级联属性赋值(此时容器已经在初始化时创建了car2的Bean)。 - 测试结果如下:
@Test public void testPerson02(){ Person person = (Person) ctx.getBean("person2"); System.out.println(person); }
3.测试赋值 null<null/>
专有标记
结果如下:<bean id="person2" class="com.fafa.spring.beans.Person"> <constructor-arg value="Jerry"></constructor-arg> <constructor-arg value="25"></constructor-arg> <!-- 测试赋值 null <null/>专有标记--> <constructor-arg><null/></constructor-arg> </bean>
小结
本次主要学习了如何引用创建的Bean(使用`ref`)以及对初始化后的属性进行级联属性赋值,使用`<null/>`专有标记将属性的值设为null