根据类中构造方法的参数类型不同,实例化方法可分为下面几类:
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 参考上文