我理解的Spring(二)注入值

一、前言

上一章记录了Spring的概念、Spring容器及IOC相关的知识点。这一章将继续记录一些Spring相关知识点。

二、Spring基础

1. 注入基本数据类型的值

注入基本数据类型,使用property元素,name为属性名,value为需要注入的属性值。代码如下。
Val.java

package base;

public class Val {
	private String name;
	private int age;
	private boolean flag;
	private byte num;
	private double sum;
	
	public Val() {
		System.out.println("val()");
	}
	
	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public void setNum(byte num) {
		this.num = num;
	}

	public void setSum(double sum) {
		this.sum = sum;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "Val [name=" + name + ", age=" + age + ", flag=" + flag + ", num=" + num + ", sum=" + sum + "]";
	}
}

val.xml

 	<bean id="v" class="base.Val">
 	    <property name="name" value="张三"></property>
 	    <property name="age" value="18"></property>
 	    <property name="flag" value="true"></property>
 	    <property name="num" value="12"></property>
 	    <property name="sum" value="18.7776"></property>
 	</bean>

启动容器并测试:

package mytest;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import base.Val;
import ioc.B;

public class MyTest3 {
	@Test
	public void t1(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("val.xml");
		Val val = ac.getBean("v",Val.class);
		System.out.println(val);
	}
	
	
}

测试结果:

val()
Val [name=张三, age=18, flag=true, num=12, sum=18.7776]

2. 注入集合类型的值

有四种集合类型,分别为List,Set,Map,Properties
Val2.java

package base;

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

public class Val2 {
	private List city;
	private Set interest;
	private Map<String,Double> score;
	private Properties db;
	public Val2() {
		super();
	}
	public void setCity(List city) {
		this.city = city;
	}
	public void setInterest(Set interest) {
		this.interest = interest;
	}
	public void setScore(Map<String, Double> score) {
		this.score = score;
	}
	public void setDb(Properties db) {
		this.db = db;
	}
	@Override
	public String toString() {
		return "Val2 [city=" + city + ", interest=" + interest + ", score=" + score + ", db=" + db + "]";
	}
}

val.xml

<bean id="v2" class="base.Val2">
 	    <property name="city">
 	        <list>
 	            <value>成都</value>
 	            <value>上海</value>
 	            <value>北京</value>
 	        </list>
 	    </property>
 	    <property name="interest">
 	        <set>
 	            <value>唱歌</value>
 	            <value>跳舞</value>
 	            <value>弹琴</value>
 	        </set>
 	    </property>
 	    <property name="score">
 	        <map>
 	            <entry key="语文" value="99"></entry>
 	            <entry key="数学" value="87.5"></entry>
 	            <entry key="外语" value="91"></entry>
 	        </map>
 	    </property>
 	    <property name="db">
 	        <props>
 	            <prop key="useruame">zs</prop>
 	            <prop key="password">123</prop>
 	        </props>
 	    </property>
 	</bean>

启动容器并测试:

@Test
	public void t2(){
		ApplicationContext ac = new ClassPathXmlApplicationContext("val.xml");
		Val2 val2 = ac.getBean("v2",Val2.class);
		System.out.println(val2);
	}

结果:

val()
Val2 [city=[成都, 上海, 北京], interest=[唱歌, 跳舞, 弹琴], score={语文=99.0, 数学=87.5, 外语=91.0}, db={useruame=zs, password=123}]

3. 引用的方式注入集合类型

如果像上面的方式注入集合类型,当出现多个bean共用一个数据的时候,就会出现很多重复代码,如果我们能把这些数据封装成一个共用的bean,就不会出现重复的情况。代码如下。

	<util:list id="cityBean">
 	    <value>重庆</value>
 	    <value>贵阳</value>
 	</util:list>
 	
 	<util:set id="interestBean">
 	    <value>编程</value>
 	    <value>游泳</value>
 	</util:set>
 	
 	<util:map id="scoreBean">
 	    <entry key="政治" value="100"></entry>
 	    <entry key="地理" value="90"></entry>
 	</util:map>
 	
 	<util:properties id="dbBean">
 	    <prop key="user">ls</prop>
 	    <prop key="password">321</prop>
 	</util:properties>
 	
 	<bean id="v3" class="base.Val2">
 	    <property name="city" ref="cityBean"></property>
 	    <property name="interest" ref="interestBean"></property>
 	    <property name="score" ref="scoreBean"></property>
 	    <property name="db" ref="dbBean"></property>
 	</bean>

测试结果:

Val2 [city=[重庆, 贵阳], interest=[编程, 游泳], score={政治=100.0, 地理=90.0}, db={user=ls, password=321}]

3.1 读取properties文件内容

此处使用了location属性来定位文件位置,需要注意的是必须要加classpath:
其他的三个参数都是沿用上面的,未作改变。

<util:properties id="dbBean2" location="classpath:db.properties"></util:properties>
 	
<bean id="v3" class="base.Val2">
    <property name="city" ref="cityBean"></property>
    <property name="interest" ref="interestBean"></property>
    <property name="score" ref="scoreBean"></property>
    <property name="db" ref="dbBean2"></property>
</bean>

测试结果:

Val2 [city=[重庆, 贵阳], interest=[编程, 游泳], score={政治=100.0, 地理=90.0}, db={password=222, username=zdl}]

Spring表达式

Spring引入了一种表达式语言,和EL表达类似,该表达式可以读取一个bean对象/集合中的值。
name是获取一个id为v的bean的name属性的值。
city是获取id为cityBean的List集合的第一个值
interest是获取id为interestBean的Set集合的第二个值
score是获取id为scoreBean的Map集合中key为zhengzhi的值
score2是获取id为scoreBean的Map集合中key为地理的值(key为中文需要如此写)
username是获取id为dbBean2的properties的username的值

<bean id="v4" class="base.Val4">
 	    <property name="name" value="#{v.name}"></property>
 	    <property name="city" value="#{cityBean[0]}"></property>
 	    <property name="interest" value="interestBean[1]"></property>
 	    <property name="score" value="#{scoreBean.zhengzhi}"></property>
 	    <property name="score2" value="#{scoreBean['地理']}"></property>
 	    <property name="username" value="#{dbBean2.username}"></property>
 	</bean>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值