1. 程式人生 > >Spring入門學習(Bean的引用) 第二節

Spring入門學習(Bean的引用) 第二節

Spring學習 第二節

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