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. mac下git中文乱码

    今天从window切mac,git使用时各种问题.典型的就是,git commit 可以使用中文注释,但是使用 git log 查看的时候发现都是乱码,乱码效果如下: <B1><E0 ...

  2. Web内容管理系统 Magnolia 介绍-挖掘优良的架构(1)

    Magnolia简介: Magnolia CMS是一家瑞士公司自2003年起发布的一个基于Java的开源内容管理系统.它适合且已被使用在以下领域:电子商务(例如:COOP.Migros.Rossman ...

  3. bzoj3242

    如果是树,那么一定选择树的直径的中点 套了个环?裸的想法显然是断开环,然后求所有树的直径的最小值 环套树dp的一般思路,先把环放到根,把环上点下面的子树dp出来,然后再处理环上的情况 设f[i]表示以 ...

  4. UVa 10341 (二分求根) Solve It

    很水的一道题,因为你发现这个函数是单调递减的,所以二分法求出函数的根即可. #include <cstdio> #include <cmath> //using namespa ...

  5. 实现一个基于FTP协议的程序——文件上传下载器(十三)

    此为一个系列,后续会把内容补上...

  6. linux 服务自动调用

    php服务地址: http://192.168.2.117/web/index.php/buy/auctionselect 编写脚本service.sh,内容: #! /bin/sh crul htt ...

  7. AngularJS 拦截器和应用例子(转)

    $httpAngularJS 的 $http 服务允许我们通过发送 HTTP 请求方式与后台进行通信.在某些情况下,我们希望可以俘获所有的请求,并且在将其发送到服务端之前进行操作.还有一些情况是,我们 ...

  8. Hide Xcode8 strange log.

    Product > Scheme > Edit Scheme Environment Variables set OS_ACTIVITY_MODE = disable

  9. Oracle RAC 客户端连接负载均衡(Load Balance)

    实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连 ...

  10. MySQL基础之第6章 创建、修改和删除表 .

    6.1.创建表 6.1.1.创建表的语法形式 CREATE TABLE 表名 ( 属性名 数据类型 [完整性约束条件],属性名 数据类型 [完整性约束条件],...... 属性名 数据类型); 完整性 ...