Spring——如何为不同数据类型参数赋值

bean 标签

作用:
用于配置对象让spring来创建的,默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建成功。
为bean标签添加idname属性都可以通过调用getBean(id属性值或name某个属性值)方法获取到Spring IOC容器中的对象;但需要注意以下几点:

  1. id属性值只能定义一个标识,而name属性值可以使用分号(";")、空格(" “)或逗号(”,")分隔定义多个,如下代码
<bean id="helloWorld" name="hello;world" class="com.spring.test.HelloWorld"></bean>
可通过如下方式获取Spring IOC中的对象:
ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext("application.xml");
System.out.println(application.getBean("helloWorld"));//注意用这种方法获得的对象是Object类型的
System.out.println(application.getBean("hello"));
System.out.println(application.getBean("world"));
application.close();
  1. id和name属性值不能重复;
  2. bean标签中可以没有id和name属性,此时可以通过调用getBean(Class对象或类全名)方法获取到Spring IOC容器中的对象,如下所示:
<bean class="com.spring.test.HelloWorld"></bean>
可通过如下方式获取Spring IOC中的对象:
ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext("application.xml");
System.out.println(application.getBean(HelloWorld.class));
System.out.println(application.getBean("com.spring.test.HelloWorld"));
application.close();

constructor-arg子标签

constructor-arg子标签:指定创建类对象时使用哪个构造函数,每一对或每一个constructor-arg子标签配置一个参数列表中的参数值;如果不配置子标签,则默认使用无参构造函数实例化对象
属性

name属性:通过参数名找到参数列表中对应参数
index属性:通过参数在参数列表中的索引找到参数列表中对应参数,index从0开始:
type属性:通过参数数据类型找到参数列表中对应参数
value属性:设置参数列表参数对应的值,用于设定基本数据类型和String类型的数据
package com.spring.test;
public class Student {
    
    
	public Student(String name, double score) {
    
    
		System.out.println(name + ":" + score);
	}
}
第一种配置方式:按照参数在参数列表中的正常顺序进行配置,此时不需要设置name、index或type属性:
<bean class="com.spring.test.Student">
	<constructor-arg value="张三" ></constructor-arg>
	<constructor-arg value="100" ></constructor-arg>
</bean>
第二种配置方式:如果不按照参数在参数列表中的正常顺序进行配置,则需要设定name、index或type属性,否则配置错误:
	a、name属性
<bean class="com.spring.test.Student">
	<constructor-arg name="score" value="100"></constructor-arg>
	<constructor-arg name="name" value="张三"></constructor-arg>
</bean>

	b、index属性
<bean class="com.spring.test.Student">
	<constructor-arg index="1" value="100"></constructor-arg>
	<constructor-arg index="0" value="张三"></constructor-arg>
</bean>
	c、type属性
<bean class="com.spring.test.Student">
	<!-- 此时type可以为java.lang.Double吗?——不可以,要和参数数据类型严格一致 -->
	<constructor-arg value="100" type="double"></constructor-arg>
	<!-- 此时type可以为java.lang.Object吗?——不可以,要和参数数据类型严格一致 -->
	<constructor-arg value="张三" type="java.lang.String"></constructor-arg>
</bean>

通过构造方法为不同数据类型参数赋值

无参构造方法

使用默认无参构造函数,会根据默认无参构造函数来创建类对象。如果bean中没有默认无参构造函数,将会创建失败。
如:

<bean id = "Student" class = "com.jd.vo.Student"></bean>

此时Student中必须有无参的构造函数。

有参构造方法

1.基本数据类型或String 使用value属性赋值

public Student(int age,String name){
    
    
	System.out.println(age+","+name);
}
<bean  class="com.jd.vo.Student">
    <constructor-arg name = "age" value="12"></constructor-arg>
    <constructor-arg name = "name" value="Jom"></constructor-arg>
</bean>

数组类型

public Student(int[] age){
    
    
   for (int s:age) {
    
    
        System.out.println(s);
    }
}
<!--4.array 使用array标签-->
<bean name="in" class="java.lang.Integer">
    <constructor-arg value="20"></constructor-arg>
</bean>
<bean class="com.jd.vo.Student">
    <constructor-arg>
        <array>
            <value>10</value>
            <ref bean="in"></ref>
            <bean class="java.lang.Integer">
                <constructor-arg value="18"></constructor-arg>
            </bean>
            <value>15</value>
        </array>
    </constructor-arg>
</bean>

类类型

public Student(Date birth){
    
    
  System.out.println(birth);
}
<!--2.类类型,则使用ref属性赋值,同样的是给name赋值,但是该值是bean类型,必须在配置文件中配置。-->
<bean class = "com.jd.vo.Student">
    <constructor-arg ref="d"></constructor-arg>
</bean>

List类型

//参数为List类型
public Student(List<String> student){
    
    
    for (String s:student) {
    
    
        System.out.println(s);
    }
}
<!--3.List 使用list标签-->
<bean name="ss" class="java.lang.String">
    <constructor-arg value="王三"></constructor-arg>
</bean>
<bean class = "com.jd.vo.Student">
    <constructor-arg>
        <list>
            <value>张三</value>
            <value>李四</value>
            <value>王五</value>
            <bean class="java.lang.String"></bean>
            <ref bean="ss"></ref>
        </list>
    </constructor-arg>
</bean>

Set类型

public Student(Set<String> mobiles){
    
    
   for (String mobile:mobiles) {
    
    
        System.out.println(mobile);
    }
}
<!--5.set 使用set标签-->
<bean name="s" class="java.lang.String">
    <constructor-arg value="119"></constructor-arg>
</bean>
<bean class="com.jd.vo.Student">
    <constructor-arg>
        <set>
            <value>133235</value>
            <bean class="java.lang.String">
                <constructor-arg value="110"></constructor-arg>
            </bean>
            <ref bean="s"></ref>
        </set>
    </constructor-arg>
</bean>

Map类型

public Student(Map<String,String> map){
    
    
    Set<String> set = map.keySet();
    for(String key : set){
    
    
        System.out.println(key+" ,"+map.get(key));
    }
}
<!--6.Map 使用map标签-->
<bean name="k" class="java.lang.String">
    <constructor-arg value="张三"></constructor-arg>
</bean>
<bean name="v" class="java.lang.String">
    <constructor-arg value="张三"></constructor-arg>
</bean>
<bean class="com.jd.vo.Student">
    <constructor-arg>
        <map>
            <entry key="王五" value="110"></entry>
            <entry key-ref="k" value-ref="v"></entry>
        </map>
    </constructor-arg>
</bean>

Properties类型

public Student(Properties properties){
    
    
    System.out.println(properties.getProperty("name"));//Jim
    System.out.println(properties.getProperty("mobile"));//110
}
<!--7.Properties 使用props标签-->
<bean class="com.jd.vo.Student">
    <constructor-arg>
        <props>
            <prop key="name">Jim</prop>
            <prop key="mobile">110</prop>
        </props>
    </constructor-arg>
</bean>

通过set方法为不同数据类型参数赋值

方法一:

class Student {
    
    

    private String name;
    private int[] scores;

    @Override
    public String toString() {
    
    
        return "Student{" +
                "name='" + name + '\'' +
                ", scores=" + Arrays.toString(scores) +
                '}';
    }
    public int[] getScores() {
    
    
        return scores;
    }
    public void setScores(int[] scores) {
    
    
        this.scores = scores;
    }
    public String getName() {
    
    
        return name;
    }
    public void setName(String name) {
    
    
        this.name = name;
    }
}

public class Test {
    
    
    public static void main(String[] args) {
    
    

        //默认情况下,new ClassPathXmlApplicationContext("application.xml")执行后,Spring自动调用类中无参构造方法;
        //lazy-init = true,则不会随new ClassPathXmlApplicationContext("application.xml")执行而创建对象,什么时候获取该对象,什么时候创建
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
        System.out.println(applicationContext.getBean("Student"));
        //Student{name='Jim', scores=[98, 100, 98]}
    }
}
<!--通过set方法赋值-->
<bean id="in" class="java.lang.Integer">
    <constructor-arg value="100"></constructor-arg>
</bean>
<bean id = "Student" class="com.jd.vo.Student">
    <property name="name" value="Jim"></property>
    <property name="scores">
        <array>
            <value>98</value>
            <ref bean ="in"></ref>
            <bean class="java.lang.Integer">
                <constructor-arg value="98"></constructor-arg>
            </bean>
        </array>
    </property>
</bean>

方法二:

猜你喜欢

转载自blog.csdn.net/weixin_44630656/article/details/109534172
今日推荐