[spring] spring学习笔记(2): 通过xml实现依赖注入 - 特殊注入类型

实际应用中, 我们的对象可能会引用很多不同类型的东西, 不单单只是几个数值

对象类型

在前一篇文章中, 已经使用引用对象作为例子, 关键在于使用ref

<!--注意引用的对象要先创建Bean, id为weapon1-->
<bean id="player1" class="com.demo.player">
	<!--通过setter注入, 注意ref的使用-->
	<property name="lv" value="60"></property>
	<property name="weapon" ref="weapon1"></property>
</bean>

还有一种内部Bean的方法

<bean id="player2" class="com.demo.player">
	<!--通过setter注入, 注意ref的使用-->
	<property name="lv" value="60"></property>
	<property name="weapon">
		<bean id="weapon" class="com.demo.weapon">
			<property name="type" value="sword"></property>
		</bean>
	</property>
</bean>

以及级联属性

<!--注意引用的对象要先创建一个Bean, id是weapon3-->
<bean id="player3" class="com.demo.player">
	<!--通过setter注入, 注意ref的使用-->
	<property name="lv" value="60"></property>
	<property name="weapon" ref="weapon3"></property>
	<property name="weapon.type" value="catalyst"></property>
</bean>

Array类型

在Player类中增加一个数组, string类型

public class Player {
	private String[] Items;
	// getter and settter
}

配置

<bean id="player4" class="com.demo.player">
	<property name="items">
		<array>
			<value>coins</value>
			<value>shirts</value>
			<value>amor</value>
		</array>
	</property>
</bean>

List类型

添加一个列表, Item类型

public class Player {
	private List<Item> items;
	// getter and settter
}

配置

<!--记得先创建Item对象-->
<bean id="player5" class="com.demo.player">
	<property name="items">
		<list>
		<!--bean后面是上面创建的Item对象的id-->
			<ref bean="coins"></ref>
			<ref bean="amores"></ref>
		</list>
	</property>
</bean>

Map类型

添加一个映射, 表示玩家的各种属性值

public class Player {
	private Map<String, int> stats;
	// getter and settter and toString
}

配置, 总这里就可以看出xml配置还是有缺点的

<!--记得先创建Item对象-->
<bean id="player6" class="com.demo.player">
	<property name="stats">
		<map>
			<entry>
				<key><value>HP</value></key>
				<value>11320</value>
			</entry>
			<!--other entries-->
		</map>
	</property>
</bean>
<!--死亡缩进-->

集合Bean

就是不同类型的Bean集中到一起注入, i.e.把上文的map类型和list类型的放在一块
因为需要使用util, 所以xml文件头部变化较大

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:util="http://www.springframework.org/schema/beans/util"
	   xsi:schemaLocation="
	   	http://www.springframework.org/schema/util
		http://www.springframework.org/schema/beans/spring-util.xsd
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

下面这样写

<util:list id="someList">
	<ref bean="beanOfItemInList"></ref>
</util:list>
<util:map id="someMap">
	<entry>
		<key><value>HP</value></key>
		<!--could be other beans ... use 'ref'-->
		<value>11320</value>
	</entry>
	<!--other entries-->
</util:map>

p命名空间

p命名空间这样用

<!--前面记得创建weapon7的bean对象-->
<bean id="player7" class="com.demo.player" 
	  p:lv="60" p:weapon="weapon7"></bean>

完结, 没有感想, 个xml文件写得头疼

posted @ 2024-01-16 16:26  Akira300000  阅读(4)  评论(0编辑  收藏  举报