IOC容器如何向没有默认构造方法的类中传值

上代码:

app.xml

<!--app.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:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
	<bean name="date" class="java.util.Date"></bean>
	<!-- 如何向构造方法里面传值 -->
	
	<!-- String 和基本类型 -->
	<bean class="club.shaoyu.vo.UserInfo" lazy-init="true" id="i">
		<constructor-arg value="name" type="java.lang.String"></constructor-arg>
		<constructor-arg value="12" type=""></constructor-arg>
	</bean>
	
	<!-- 自定义类 -->
	<bean class="club.shaoyu.vo.UserInfo" lazy-init="true" id="d">
		<constructor-arg ref="date"></constructor-arg>
	</bean>
	
	<!-- 数组类型 -->
	
	<bean class="club.shaoyu.vo.UserInfo" lazy-init="true" id="a" >
		<constructor-arg>
			<array>
				<bean class="java.lang.String">
					<constructor-arg value="Tim"></constructor-arg>
				</bean>
				<value>Tim</value>
			</array>
		</constructor-arg>
	</bean>
	<!-- List 类型 -->
	<bean class="club.shaoyu.vo.UserInfo" lazy-init="true" id="l">
		<constructor-arg>
			<list>
				<value>12</value>
				<value>123</value>
				<value>1234</value>
				<value>12345</value>
			</list>
		</constructor-arg>
	</bean>
	
	<!-- set集合中的自定义类型 -->
	<bean class="club.shaoyu.vo.UserInfo" lazy-init="true" id="s">
		<constructor-arg>
			<set>
				<bean class="java.util.Date"></bean>
				<ref bean="date"/>
			</set>
		</constructor-arg>
	</bean>
	
	<!-- map集合 -->
	<bean class="java.lang.String" name="x">
		<constructor-arg value="小黑"></constructor-arg>
	</bean>
	<bean class="java.lang.Double" name="z">
		<constructor-arg value="120"></constructor-arg>
	</bean>
	<bean class="club.shaoyu.vo.UserInfo" lazy-init="true" id="m">
		<constructor-arg>
			<map>
				<entry key="小名" value="1200"></entry>
				<entry key-ref="x" value-ref="z"></entry>
			</map>
		</constructor-arg>
	</bean>
    <!-- properties -->
	<bean class="club.shaoyu.vo.UserInfo" id="p" lazy-init="true">
		<constructor-arg>
			<props>
				<prop key="url">mysql://49.232.163.112:3306/mail</prop>
	 			<prop key="driver">jdbc</prop>
	 			<prop key="userName">root</prop>
			</props>
		</constructor-arg>
	</bean>
</beans>

Test.java

package club.shaoyu.test;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import club.shaoyu.vo.UserInfo;

public class Test {

		public static void main(String[] args) {
			ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("app.xml");
			UserInfo userInfo =applicationContext.getBean("m",UserInfo.class);
			applicationContext.close();
		}
}

UserInfo.java

package club.shaoyu.vo;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class UserInfo {

	public UserInfo(String name ,int age) {
		System.out.println(name+","+age);
	}
	
	public UserInfo(Date date) {
		System.out.println(date);
	}
	
	public UserInfo (String [] mobiles) {
		for (String mobile : mobiles) {
			System.out.println(mobile);
		}
	}
	
	public UserInfo(List<Double> profit) {
		for (Double double1 : profit) {
			System.out.println(double1);
		}
	}
	public UserInfo(Set<Date> dates) {
		for (Date date : dates) {
			System.out.println(date);
		}
	}
	public UserInfo(Map<String,Double> money) {
		for (String name : money.keySet()) {
			System.out.println(name+","+money.get(name));
		}
	}
	public UserInfo(Properties properties) {
		System.out.println(properties.getProperty("url"));
		System.out.println(properties.get("driver"));
		System.out.println(properties.get("userName"));
	}
}

测试方式:在Test.java中UserInfo userInfo =applicationContext.getBean(id,UserInfo.class);id处放置在app.xml 中的bean的id,可测试相关属性

总结:

(1)再传入String类型和基本属性时:可通过Bean或是value

(2)在传入自定义类型时:需要在<constructor-arg></constructor-arg>中输入相应的bean标签,或者是使用ref标签中的bean属性=“id/name”

(3)在传入List,Set集合时,需要在<constructor-arg></constructor-arg>中输入相应的<set>,<list>标签

(4)在传入List,Set集合时,需要在<constructor-arg></constructor-arg>中输入<map><entry>其中entry标签中有属性key ,value ,key-ref,value-ref用法和(1)、(2)相同

(5)在传入properties属性时,需要<constructor-arg></constructor-arg>中输入<props><prop>标签-->其中key,并且可以在标签中输入想要的properties值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值