(4)Spring学习记录---Spring_bean(属性配置细节)

这一节主要学了bean的详细配置

特殊符号的解决方法:

如果字符串里有特殊符号需要用<![CDATA[]]>

引用其他bean

通过引用来使用bean。有时某类bean包含另一类bean。这里要用到ref引用

实例:这里创建两个类person和car,添加toString方法,构造器

Person.class

public class Person {
	private String name;
	private int age;
	private Car car;

	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;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", car=" + car + "]";
	}
	
}

Car.class

public class Car {
	private String name;
	private int speed;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	public Car(String name, int speed) {
		super();
		this.name = name;
		this.speed = speed;
	}
	@Override
	public String toString() {
		return "Car [name=" + name + ", speed=" + speed + "]";
	}
}

applicationContext.xml

在配置信息里用ref来引用

<!-- 
		car的bean
	 -->
	 
	 <bean id="car" class="jjh.test.Car">
	 	<constructor-arg value="benchi" type="java.lang.String"></constructor-arg>
	 	<constructor-arg value="250" type="int"></constructor-arg>
	 </bean>
	 
	 <!-- 
	 	Person的bean
	  -->
	  
	  <bean id="person" class="jjh.test.Person">
	  	 	<property name="name" value="jjh"></property>
	  	 	<property name="age" value="20"></property>
	  	 	<property name="car" ref="car"></property>
	  </bean>

内部bean

内部bean写在bean的里面不能被外部bean所引用

 <bean id="person" class="jjh.test.Person">
	  	 	<property name="name" value="jjh"></property>
	  	 	<property name="age" value="20"></property>
	  	 	<!-- <property name="car" ref="car"></property> -->
	  	 	
	  	 	<!-- 
	  	 		内部bean
	  	 	 -->
	  	 	 <property name="car">
	  	 	 	<bean class="jjh.test.Car">
	  	 	 		<constructor-arg value="BAOBA"></constructor-arg>
	  	 	 		<constructor-arg value="240"></constructor-arg>
	  	 	 	</bean>
	  	 	 </property>
	  </bean>

null值和级联属性

级联属性配置的条件:

1.被导入的bean需要完成初始化(构造器完成)

2.必须导入该bean的引用

3.为该bean的属性赋值

 <bean id="car" class="jjh.test.Car">
	 <!-- 1.通过构造器完成初始化 -->
	 	<constructor-arg value="benchi" type="java.lang.String"></constructor-arg>
	 	<constructor-arg value="250" type="int"></constructor-arg>
	 </bean>

<bean id="person2" class="jjh.test.Person">
	   		<constructor-arg value="jjh" type="java.lang.String"></constructor-arg>
	   		<constructor-arg value="20" type="int"></constructor-arg>
	   		<!-- 2.必须导入car的引用 -->
	   		<constructor-arg ref="car"></constructor-arg>
	   		<!-- 
	   			为级联属性赋值,注意:属性需要先初始化后才可以为级联属性赋值,不同于struts2
	   		 -->
	   		 <!-- 
	   		 	3.为需要级联的属性赋值
	   		  -->
	   		<property name="car.name" value="mazida"></property>
	   </bean>

集合属性

比如使用List属性

<bean id="person" class="jjh.test.Person">
	   		<property name="name" value="jjh"></property>
	   		<property name="age" value="21"></property>
	   		<!-- 
	   			使用List 节点为List类型的属性赋值
	   		 -->
	   		<property name="cars">
	   			<list>
	   				<ref bean="car"/>
	   				<ref bean="car2"/>
	   				<ref bean="car3"/>
	   			</list>
	   		</property>
	   </bean>

比如使用map属性

<!-- 
			使用map配置属性值
		 -->
		 <bean id="person" class="jjh.test.Person">
	   		<property name="name" value="jjh"></property>
	   		<property name="age" value="21"></property>
	   		<property name="cars">
	   			<map>
	   				<entry key="aa" value-ref="car"></entry>
	   				<entry key="bb" value-ref="car2"></entry>
	   				<entry key="cc" value-ref="car3"></entry>
	   			</map>
	   		</property>
	   </bean>

比如使用properties(HashTable的子类)属性配值

<!-- 配置properties属性值 -->

	<bean id="dataSource" class="jjh.test.DataSource">
		<property name="properties">
			<props>
			<prop key="user">root</prop>
	    		<prop key="password">1234</prop>
	    		<prop key="jdbcurl">jdbc:mysql://test</prop>
	    		<prop key="user">com.mysql.jdbc.Driver</prop>
			</props>
		</property>
	</bean>

使用Utility scheme,当我们想把集合拿出来,公共使用时。

在.xml下的namespace下将util画√


	<!-- 配置单例的集合bean,以供多个bean进行引用 -->
	<util:list id="cars">
		<ref bean="car" />
		<ref bean="car2" />
		<ref bean="car3" />
	</util:list>

使用p标签的命名空间

<!-- 
		通过p命名空间为bean 的属性赋值,需要先引入p命名空间
	 -->
	 
	 <bean id="person4" class="jjh.test.Person" p:age="20" p:name="jjh" p:cars-ref="cars">
	 </bean>

猜你喜欢

转载自blog.csdn.net/ck784101777/article/details/83015431