xml 构造方法实例化Java类

根据类中构造方法的参数类型不同,实例化方法可分为下面几类:

String类型、基本数据类型

UserInfo.java

public class UserInfo {
	
	public UserInfo(int age) {
		System.out.println("age:"+age);
	}
	
	public UserInfo(String name) {
		System.out.println("name:"+name);
	}
	
	public UserInfo(int age,String name) {
		System.out.println("age:"+age+"     "+"name:"+name);
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean class="com.jd.vo.UserInfo">		
		<constructor-arg type="String" value="Tom"></constructor-arg>
		<constructor-arg type="int" value="12"></constructor-arg>
	</bean>

</beans>

需要创建对象的类一共有三个构造方法,我们在xml想实现该类的实例化就需要考虑使用哪个构造方法;上述代码实例化的对象是使用该类的第三个构造方法,对于有多个参数的构造方法,我们进行实例化的时候需要注意:每一个 constructor-arg 分支都需要注明是为多个参数的构造方法的哪个参数赋值;这里我们选择使用 type 即类型进行声明;此外我们还可以使用name和index进行声明,用法基本相同,这里不多介绍;注意,如果多参构造方法赋值是严格按照顺序来的,那么不再需要使用type、name、index标识,直接参数顺序赋值即可;即上述constructor-arg也可写成:

<constructor-arg  value="12"></constructor-arg>
<constructor-arg  value="Tom"></constructor-arg>

Test.java

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

	public static void main(String[] args) {
		new ClassPathXmlApplicationContext("application.xml");
	}
}

类类型(引用数据类型和自定义类型)

UserInfo.java

import java.util.Date;

public class UserInfo {

	public UserInfo(Date birthday) {
		System.out.println("birthday:"+birthday);
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


	<bean id="birth" class="java.util.Date"></bean>
	<bean class="com.jd.vo.UserInfo">		
		<constructor-arg ref="birth"></constructor-arg> 
	</bean>

</beans>

自定义类和引用数据类型统一先为其创建 id 再在constructor-arg 分支中使用ref引用(有的时候需要加前缀如:key-ref 或 value-ref);

Test.java 参考上文 因为本篇博客Test.java 的代码都和第一次发的代码相同,因此下面只提醒有该代码,不再上传代码了;

List集合

UserInfo.java

import java.util.List;

public class UserInfo {

	public UserInfo(List<Object> list) {
		System.out.println("list集合");
		for(Object object:list) {
			System.out.println(object);
		}
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="birth" class="java.util.Date"></bean>
	<bean class="com.jd.vo.UserInfo">
		
		<!-- List集合使用list标签 -->
		<constructor-arg>
			<list>
				<value>12</value>
				<value>Tom</value>
				<ref bean="birth"/>
				<bean class="java.lang.String">
					<constructor-arg value="Beijing"></constructor-arg>
				</bean>
			</list>  
		</constructor-arg>	
	</bean>

</beans>

List集合实例化对象需要在 constructor-arg 分支中使用list标签,然后再使用对应的标签指定值;如基本数据类型就是用value标签赋值,类类型就是用ref引用赋值,也可直接将需要的属性的类创建对象写到constructor-arg 分支中;

Test.java 参考上文

数组

UserInfo.java

public class UserInfo {

	public UserInfo(Object [] array) {
		System.out.println("array集合");
		for(Object object:array) {
			System.out.println(object);
		}
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="birth" class="java.util.Date"></bean>
	<bean class="com.jd.vo.UserInfo">
		<!-- 数组使用array标签 -->
		<constructor-arg>	
			<array>
				<value>12</value>
				<value>Tom</value>
				<ref bean="birth"/>
				<bean class="java.lang.String">
					<constructor-arg value="Beijing"></constructor-arg>
				</bean>
			</array>  
		</constructor-arg>
	</bean>
</beans>

数组使用array标签,其余用法同list标签;

Test.java 参考上文

Set集合

UserInfo.java

import java.util.Set;

public class UserInfo {

	public UserInfo(Set<Object> set) {
		System.out.println("set集合");
		for(Object object:set) {
			System.out.println(object);
		}
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="birth" class="java.util.Date"></bean>
	<bean class="com.jd.vo.UserInfo">
		<!-- Set结合使用set标签 -->
		 <constructor-arg>	
			<set>
				<value>12</value>
				<value>Tom</value>
				<ref bean="birth"/>
				<bean class="java.lang.String">
					<constructor-arg value="Beijing"></constructor-arg>
				</bean>
			</set>  
		</constructor-arg>
	</bean>
</beans>

Set集合使用set标签,其余和list标签用法相同;

Test.java 参考上文

Map

UserInfo.java

import java.util.Set;
import java.util.Map;

public class UserInfo {

	public UserInfo(Map<String,Object> map) {
		System.out.println("map集合");
		Set<String> keys = map.keySet();
		for(String key:keys) {
			System.out.println("key:"+map.get(key));
		}
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="birth" class="java.util.Date"></bean>
	<bean class="com.jd.vo.UserInfo">
		<!-- Map使用map标签 -->
		 <constructor-arg>	
			<map>
				<entry key="name" value="Tom"></entry>
				<entry key="age" value="12"></entry>
				<entry key="birthday" value-ref="birth"></entry>
			</map>  
		</constructor-arg>
	</bean>
</beans>

Map使用map标签,但是需要注意的map的数据是以key和value保存的,因此map标签中不再是value等标签了,而是entry标签,里面声明key和value即可;

Test.java 参考上文

Properties

UserInfo.java

import java.util.Properties;

public class UserInfo {

	public UserInfo(Properties properties) {
		System.out.println(properties.get("driver"));
		System.out.println(properties.get("userName"));
		System.out.println(properties.get("root"));
		System.out.println(properties.get("URL"));
	}
}

application.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="birth" class="java.util.Date"></bean>
	<bean class="com.jd.vo.UserInfo">
		<!-- Properties使用props标签 -->
		<constructor-arg>
			<props>
				<prop key="driver">com.jd.jdbc.Driver</prop>
				<prop key="userName">root</prop>
				<prop key="root">root</prop>
				<prop key="URL">jdbc:mysql://127.0.0.1:3306/keeper</prop>
			</props>
		</constructor-arg>
	</bean>
</beans>

Properties使用props标签,在props标签中需使用prop标签赋值,如上:key要写在标签内部,而value的值则需要写在标签里面(根据上面代码注意标签内部和里面的区别)且不需要使用value声明。

Test.java 参考上文

发布了99 篇原创文章 · 获赞 3 · 访问量 1236

猜你喜欢

转载自blog.csdn.net/qq_44971038/article/details/103823892
今日推荐