一:spring容器给bean对象注入属性值

1:注入基本属性值

a. 创建MessageBean类:

 /**
*
*/
package com.hlcui.dao; /**
* @author Administrator
*
*/
public class MessageBean {
private String name; private int age; private double salary; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} public String execute() {
System.out.println("name=" + name + "\nage=" + age
+ "\nsalary=" + salary);
return "success";
} }

b. 在spring容器配置文件中配置MessageBean对象核心代码:

 <!-- 配置MessageBean对象 -->
<bean id="messageBean" class="com.hlcui.dao.MessageBean">
<property name="name" value="Jack"></property>
<property name="age" value="27"></property>
<property name="salary" value="12000"></property>
</bean>

或者将value元素作为property元素的子元素,效果是一样的

 <bean id="messageBean" class="com.hlcui.dao.MessageBean">
<property name="name">
<value>Tom</value>
</property>
<property name="age">
<value>27</value>
</property>
<property name="salary">
<value>12000</value>
</property>
</bean>

c. 运行测试方法

 @Test
public void testBaseInject(){
ApplicationContext ac = getApplicationContext();
MessageBean mb = ac.getBean("messageBean", MessageBean.class);
mb.execute();
}

通过运行结果可知属性值已经注入到对象中,这种方式在前面已经总结过,就是setter注入。

2:注入集合属性值(List、Set、Map、Properties)

修改MessageBean类:

 /**
*
*/
package com.hlcui.dao; import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.Map.Entry; /**
* @author Administrator
*
*/
public class MessageBean {
private List<String> someList;
19 private Set<Integer> someSet;
20 private Map<String,Object> someMap;
21 private Properties props; private String name; private int age; private double salary; public List<String> getSomeList() {
31 return someList;
32 }
33
34 public void setSomeList(List<String> someList) {
35 this.someList = someList;
36 }
37
38 public Set<Integer> getSomeSet() {
39 return someSet;
40 }
41
42 public void setSomeSet(Set<Integer> someSet) {
43 this.someSet = someSet;
44 }
45
46 public Map<String, Object> getSomeMap() {
47 return someMap;
48 }
49
50 public void setSomeMap(Map<String, Object> someMap) {
51 this.someMap = someMap;
52 }
53
54 public Properties getProps() {
55 return props;
56 }
57
58 public void setProps(Properties props) {
59 this.props = props;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} public String execute() {
System.out.println("name=" + name + "\nage=" + age
+ "\nsalary=" + salary);
System.out.println("--------List集合结果--------");
90 for(String str:someList){
91 System.out.println(str);
92 }
93 System.out.println("--------Set集合结果--------");
94 for(Iterator<Integer> it = someSet.iterator();it.hasNext();){
95 System.out.println(it.next());
96 }
97 System.out.println("-------Map集合结果--------");
98 for(Entry<String, Object> entry:someMap.entrySet()){
99 String key = entry.getKey();
100 String value = (String) entry.getValue();
101 System.out.println(key+"=="+value);
102 }
103 System.out.println("-------Properties结果------");
104 for(Object obj : props.keySet()){
105 String value = props.getProperty((String) obj);
106 System.out.println(obj+"=="+value);
107 }
return "success";
} }

配置文件修改如下:

 <bean id="messageBean" class="com.hlcui.dao.MessageBean">
<property name="name">
<value>Tom</value>
</property>
<property name="age">
<value>27</value>
</property>
<property name="salary">
<value>12000</value>
</property>
<property name="someList">
<list>
<value>aaaaList</value>
<value>bbbbList</value>
<value>ccccList</value>
</list>
</property>
<property name="someSet">
<set>
<value>111</value>
<value>222</value>
<value>333</value>
</set>
</property>
<property name="someMap">
<map>
<entry key="1" value="java"></entry>
<entry key="2" value="c++"></entry>
<entry key="3" value="c#"></entry>
</map>
</property>
<property name="props">
<props>
<prop key="username">root</prop>
<prop key="password">root</prop>
</props>
</property>
</bean>

运行测试方法:

从结果可以看出,参数注入成功!!!

3:引用方式注入集合属性

修改配置文件内容如下:

 <util:list id="someList">
<value>aaaaList</value>
<value>bbbbList</value>
<value>ccccList</value>
</util:list>
<util:set id="someSet">
<value>111</value>
<value>222</value>
<value>333</value>
</util:set>
<util:map id="someMap">
<entry key="1" value="java"></entry>
<entry key="2" value="c++"></entry>
<entry key="3" value="c#"></entry>
</util:map>
<util:properties id="props">
<prop key="username">root</prop>
<prop key="password">root</prop>
</util:properties>
<bean id="messageBean" class="com.hlcui.dao.MessageBean">
<property name="name">
<value>Tom</value>
</property>
<property name="age">
<value>27</value>
</property>
<property name="salary">
<value>12000</value>
</property>
<property name="someList" ref="someList"></property>
<property name="someSet" ref="someSet"></property>
<property name="someMap" ref="someMap"></property>
<property name="props" ref="props"></property>
</beans>

运行测试方法:

和之前的效果是一样的,只不过这样配置更加明了!

二:利用spring表达式注入属性值

1:在src下添加文件user.properties,内容如下:

 name=Jack
age=30
salary=15000

2:在spring容器配置文件中加载配置文件

 <!-- 加载配置文件user.properties -->
<util:properties id="user" location="classpath:user.properties"/>
 <!-- 配置MessageBean对象 -->
<bean id="messageBean" class="com.hlcui.dao.MessageBean">
<property name="name" value="#{user.name}"></property>
<property name="age" value="#{user.age}"></property>
<property name="salary" value="#{user.salary}"></property>
</bean>

3:运行测试方法

通过结果可知spring表达式注入成功!

三:spring注入空值

1:修改配置文件

 <!-- 配置MessageBean对象 -->
<bean id="messageBean" class="com.hlcui.dao.MessageBean">
<property name="name">
<null/>
</property>
<property name="age" value="#{user.age}"></property>
<property name="salary" value="#{user.salary}"></property>
</bean>

2:运行测试方法

空值注入成功,只有引用数据类型才可以注入空值!

Spring学习总结四——SpringIOC容器四的更多相关文章

  1. Spring学习总结三——SpringIOC容器三

    一:spring容器自动装配注入 为了减少xml中配置内容,可以使用自动装配注入,代替setter注入,只需要在 bean对象配置中添加属性autoWire即可,那么在类中就会自动扫描setXXX() ...

  2. Spring学习总结二——SpringIOC容器二

    一:指定bean的依赖关系 例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就 需要先创建examplebean1对象. 1:创建Example ...

  3. Spring学习总结一——SpringIOC容器一

    什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spr ...

  4. Spring学习总结五——SpringIOC容器五

    一:spring组件扫描 可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置 文件中配置<context:component-scan b ...

  5. 四、spring成长之路——springIOC容器(下)

    目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...

  6. 三、spring成长之路——springIOC容器详解(上)

    目录 一.springIOC 一.springIOC 控制反转和依赖注入: ​ 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...

  7. Spring学习之旅(二)--容器

    在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建.配置.装配并管理它们的整个生命周期. Spring 容器 Spring 容器 并不是只有一个 ...

  8. Spring学习记录1——IoC容器

    IoC容器 1.1  IoC概述 Ioc(Inverse of Control,控制反转)是Spring容器的内核.对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定,即由 ...

  9. Spring学习一: Ioc容器

    Spring 容器:      Spring 容器是Spring框架的核心.Spring容器将创建Bean对象实例,把它们联系在一起,配置它们,并管理它们整个生命周期从创建到销毁.Spring 容器通 ...

随机推荐

  1. uva 542 - France '98(概率)

    题目链接:uva 542 - France '98 题目大意:有16支球队比赛,给出16支球队的名称,然后给出16*16的表格,g[i][j] 表示i队胜j队的概率,问说16支球队获得总冠军的概率. ...

  2. 如何让label和textblock分成两行

    http://stackoverflow.com/questions/183406/xaml-newline-in-string-attribute http://www.developerfusio ...

  3. js中的call及apply

    http://www.zhihu.com/question/20289071 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg ...

  4. css去掉a标签点击后的虚线框(转自网络)

    outline是css3的一个属性,用的很少. 声明,这是个不能兼容的css属性,在ie6.ie7.遨游浏览器都不兼容. outline控制的到底是什么呢? 当聚焦a标签的时候,在a标签的区域周围会有 ...

  5. java/android线程池详解

    一,简述线程池: 线程池是如何工作的:一系列任务出现后,根据自己的线程池安排任务进行. 如图: 线程池的好处: 重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销. 能有效控制线程池的最大并 ...

  6. OpenCV中图像指针注意点

    1.cvQueryFrame方法从摄像头或文件中抓取的帧图像是不能被释放和修改的 2.不要用delete删除,一定要用cvReleaseImage删除且要带有&符号.

  7. thinkphp 3+ 观后详解 (3)

    由于上一篇太长不好编辑,于是我重开了一篇. if('common' != APP_MODE && is_file(CONF_PATH.'config_'.APP_MODE.CONF_E ...

  8. Python学习入门基础教程(learning Python)--5.2 Python读文件基础

    上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...

  9. APK扩展文件及使用

    转自:http://blog.csdn.net/myarrow/article/details/7760579 一.APK扩展文件基本知识 Android Market (Google Play St ...

  10. VMWare虚拟机网络的三种工作模式

    VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...