Spring入门(4)-注入Bean属性

本文介绍如何注入Bean属性,包括简单属性、引用、内部Bean、注入集合等。

0. 目录

  1. 注入简单值
  2. 注入引用
  3. 注入内部Bean
  4. 装配集合
  5. 装配空值
  6. 使用命名空间p

1. 注入简单值

前面介绍过注入简单值的例子,在这里回顾一下。

package com.chzhao.springtest;

public class PersonBll implements IPersonBll {

	private String id;

	public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public void show() {
System.out.println(id);
} public void addPerson(Person p) {
System.out.println("add person: " + p.getName());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll" >
<property name="id" value="abcdefg"></property>
</bean>
</beans>

2. 注入引用

大部分情况下简单值不能满足要求,往往是需要一个引用。

package com.chzhao.springtest;

public class PersonBll implements IPersonBll {

	private Person person;

	public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
} public void show() {
System.out.println(this.person.getName());
} public void addPerson(Person p) {
System.out.println("add person: " + p.getName());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="p" class="com.chzhao.springtest.Person">
<property name="name" value="老王" />
</bean>
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll" >
<property name="person" ref="p"></property>
</bean>
</beans>

3. 注入内部Bean

除了上面这种方式之外,也可以把Bean定义为内部Bean,防止别的类调用。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll" >
<property name="person" >
<bean name="p" class="com.chzhao.springtest.Person">
<property name="name" value="老王" />
</bean>
</property>
</bean>
</beans>

4. 装配集合

Spring也支持装配集合,支持的集合如下:

集合元素 用途
list 装配list类型的值,允许重复
set 装配set类型的值,不允许重复
map 装配map类型的值
props 装配properties类型的值,名称和值都必须是String

4.1. 装配list或set

装配list和set差不多,只是set元素不能重复

package com.chzhao.springtest;

import java.util.List;

public class PersonBll implements IPersonBll {

	private List<String> idList;

	public List<String> getIdList() {
return idList;
} public void setIdList(List<String> idList) {
this.idList = idList;
} public void show() {
for (String s : this.idList) {
System.out.println(s);
}
} public void addPerson(Person p) {
System.out.println("add person: " + p.getName());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll">
<property name="idList">
<list>
<value>wang</value>
<value>zhao</value>
<value>li</value>
</list>
</property>
</bean>
</beans>

4.2. 装配map

package com.chzhao.springtest;

import java.util.Map;

public class PersonBll implements IPersonBll {

	private Map<Integer, Person> pmap;

	public Map<Integer, Person> getPmap() {
return pmap;
} public void setPmap(Map<Integer, Person> pmap) {
this.pmap = pmap;
} public void show() {
for (Integer i : this.pmap.keySet()) {
System.out.println(i);
System.out.println(this.pmap.get(i).getName());
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="laowang" class="com.chzhao.springtest.Person">
<property name="name" value="老王" />
</bean>
<bean name="laoli" class="com.chzhao.springtest.Person">
<property name="name" value="老李" />
</bean>
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll">
<property name="pmap">
<map>
<entry key="1" value-ref="laowang"></entry>
<entry key="2" value-ref="laoli"></entry>
</map>
</property>
</bean>
</beans>

MAP的属性包括

属性 用途
key key为String
key-ref key为引用
value 值为string
value-ref 值为引用

4.3. 装配properties

package com.chzhao.springtest;

import java.util.Properties;

public class PersonBll implements IPersonBll {

	private Properties pro;

	public Properties getPro() {
return pro;
} public void setPro(Properties pro) {
this.pro = pro;
} public void show() {
System.out.println(this.pro.get("1"));
System.out.println(this.pro.get("2"));
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll">
<property name="pro">
<props>
<prop key="1">老王</prop>
<prop key="2">老李</prop>
</props>
</property>
</bean>
</beans>

5. 装配空值

也可以把属性赋值为空

package com.chzhao.springtest;

public class PersonBll implements IPersonBll {

	private String id;

	public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public void show() {
if (this.id == null) {
System.out.println("null");
} else {
System.out.println(this.id);
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll">
<property name="id" ><null></null></property>
</bean>
</beans>

也可以定义为

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll">
<property name="id" ><null/></property>
</bean>
</beans>

6. 使用命名空间p

Spring提供了命名空间p简化Bean属性定义,需要在XML中增加

xmlns:p="http://www.springframework.org/schema/p"
package com.chzhao.springtest;

public class PersonBll implements IPersonBll {

	private String id;

	public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} private Person person; public Person getPerson() {
return person;
} public void setPerson(Person person) {
this.person = person;
} public void show() {
System.out.println(this.person.getName());
System.out.println(this.id);
} public void addPerson(Person p) {
System.out.println("add person: " + p.getName());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean name="p" class="com.chzhao.springtest.Person">
<property name="name" value="老王" />
</bean>
<bean name="PersonBll" class="com.chzhao.springtest.PersonBll"
p:person-ref = "p" p:id="0000">
</bean>
</beans>

Spring入门(4)-注入Bean属性的更多相关文章

  1. Spring学习笔记--注入Bean属性

    这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; im ...

  2. Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

  3. spring实战一:装配bean之注入Bean属性

    内容参考自spring in action一书. 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质. 1. 创建spring配置 spring是一个基于容器的框架.如果没有配置spri ...

  4. spring学习笔记之---bean属性注入

    bean属性注入 (一)构造方法的属性注入 1.Student.java package entity; public class Student { private String name; pri ...

  5. 依赖注入Bean属性

    一.Bean属性依赖注入 对于类成员变量,注入方式有三种 •构造函数注入 •属性setter方法注入 •接口注入 Spring支持前两种 1.构造函数 属性注入 使用构造方法注入,在Spring配置文 ...

  6. Spring中注解注入bean和配置文件注入bean

    注解的方式确实比手动写xml文件注入要方便快捷很多,省去了很多不必要的时间去写xml文件 按以往要注入bean的时候,需要去配置一个xml,当然也可以直接扫描包体,用xml注入bean有以下方法: & ...

  7. spring boot 动态注入bean

    方法一 SpringContextUtil public class SpringContextUtil { private static ApplicationContext application ...

  8. spring 初始化时注入bean实现listener的方法

    两种方法: 1.实现ApplicationListener<ContextRefreshedEvent>的onApplicationEvent(ContextRefreshedEvent ...

  9. spring注解方式注入bean

    用注解的方式注入bean,spring的配置文件也要增加一些约束和导入注解所在的包 applicationContext.xml <?xml version="1.0" en ...

随机推荐

  1. add-two-numbers-ii

    注意:有一种好的方法,是将链表倒转,然后依次相加. 但是,按照题目要求,用了不改变原链表的方法. 就是将两个链表增加到相同长度,然后递归相加,子函数返回后处理进位. https://leetcode. ...

  2. [LeetCode#267] Palindrome Permutation II

    Problem: Given a string s, return all the palindromic permutations (without duplicates) of it. Retur ...

  3. hdu 4970 Killing Monsters (思维 暴力)

    题目链接 题意: 有n座塔,每座塔的攻击范围为[l,r],攻击力为d,有k个怪兽从这些塔前面经过,第i只怪兽初始的生命力为hp,出现的位置为x,终点为第n个格子.问最后有多少只怪兽还活着. 分析: 这 ...

  4. Qt之QTableView添加复选框(QAbstractItemDelegate)

    简述 上节分享了使用自定义模型QAbstractTableModel来实现复选框.下面我们来介绍另外一种方式: 自定义委托-QAbstractItemDelegate. 简述 效果 QAbstract ...

  5. Java Socket(2): 异常处理

    1 超时 套接字底层是基于TCP的,所以socket的超时和TCP超时是相同的.下面先讨论套接字读写缓冲区,接着讨论连接建立超时.读写超时以及JAVA套接字编程的嵌套异常捕获和一个超时例子程序的抓包示 ...

  6. (转)TCP协议那些事

    (上) TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获.关于TCP这个协议的细节,我还是 ...

  7. 【JSP】<meta>标签用法

    转载自:http://blog.sina.com.cn/s/blog_65c74cce0102v39z.html  非常感谢这位博主,急着用,改日再细细品味重新整理这篇博文. http-equiv M ...

  8. iOS 获取已连接的wifi信息

    转:http://blog.csdn.net/marujunyy/article/details/16843173 首先需要   #import <SystemConfiguration/Cap ...

  9. Linux iostat监测IO状态

    Linux iostat监测IO状态 http://www.orczhou.com/index.php/2010/03/iostat-detail/

  10. JavaScript 现状:方言篇

    导读 JavaScript 和其他编程语言有一个很大的不同,它不像单纯的一个语言,而像一个由众多方言组成大家族.从 2009 年 CoffeeScript 出现开始,近几年出现了大量基于 JavaSc ...