Spring入门学习(Bean的引用) 第二节

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011171125/article/details/85162489

Bean的引用

使用propertyref属性建立bean之间的引用关系

  1. 创建一个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;
    	}
    }
    
  2. 创建一个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>
    
  3. 创建一个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);
    	}
    }
    
  4. 测试结果,可以看出名为perosn的Bean已经成功注入到了Car属性中。
    在这里插入图片描述

另一种方式是创建一个部的Bean使用

  1. 创建一个内部的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>
    
  2. 此时得到测试结果如下:
    在这里插入图片描述
    注意内部创建的Bean无法被外部引用,它只能在内部使用

为Bean的引用的属性赋值

  1. 创建一个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)。
  2. 测试结果如下:
    	@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

猜你喜欢

转载自blog.csdn.net/u011171125/article/details/85162489