Setter注入又称为属性注入。是通过属性的setXXX()方法来注入Bean的属性值或依赖对象。由于Setter注入具有可选择性和灵活性高的优点,因此Setter注入是实际应用中最常用的注入方式。

ref的方式


a、使用2.2的例子中的UserDao与UserDaoImpl

[java] 
view plain
copy
print
?

 

  1. public interface UserDao {
  2. public void save();
  3. }
[java] 
view plain
copy
print
?

 

  1. public class UserDaoImpl implements UserDao {
  2. public void save() {
  3. System.out.println("保存用户...");
  4. }
  5. }


b、创建UserService接口及其实现类UserServiceImpl

public interface UserService {
public void addUser();
}
public class UserServiceImpl implements UserService {
/*
* 在service层使用dao层的接口对象
* 接口对象必须有其setter方法,以供运行期spring注入值
*/
private UserDao userDao; public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void addUser() {
userDao.save();
}
}

c、将UserDaoImpl与UserServiceImpl交由Spring管理

<bean id="userDao" class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>

	<!-- property是UserServiceImpl中的属性设置,这些属性必须有setter方法。name是属性的名字,与类中的名字相同。ref是引用,引用的是上面配置好的UserDaoImpl的name -->
<bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>

d、测试

ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
UserService userService = (UserService) context.getBean("userService");
userService.addUser();

注入内部Bean


注入内部Bean其实也是ref的方式基本一样,只是在配置的时候不大相同而已。UserDaoImpl不再需要作为单独的Bean交由Spring管理,而是作为UserServiceImpl的一部分来进行配置。

配置:

<!-- property是UserServiceImpl中的属性设置,这些属性必须有setter方法。name是属性的名字,与类中的名字相同。Bean是属性对象所属的类的完整类名 -->
<bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
<property name="userDao">
<bean class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>
</property>
</bean>

注入基本类型


如:UserService中有一个String类型的字符串username:

public class UserServiceImpl implements UserService {
private UserDao userDao;
private String username; public void setUsername(String username) {
this.username = username;
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void addUser() {
System.out.println(username);
userDao.save();
}
}

配置:

<bean id="userService" class="cn.framelife.spring.service.impl.UserServiceImpl">
<property name="userDao">
<bean class="cn.framelife.spring.dao.impl.UserDaoImpl"></bean>
</property>
<property name="username" value="zhangsan"></property>
</bean>

注入集合


a、List和Set

类中有一个集合属性及其setter方法。

private Set<String> usernames;

public void setUsernames(Set<String usernames){
this.usernames = usernames;
}

配置:

<property name="usernames">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>

或者:

<property name=" usernames">
<set>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</set>
</property>

b、Map

类中的属性:

        private Map<Integer, String> map;

	public void setMap(Map<Integer, String> map) {
this.map = map;
}

配置:

<property name="map">
<map>
<entry key="1">
<value>aaa</value>
</entry>
<entry key="2">
<value>bbb</value>
</entry>
</map>
</property>

c、Properties

Properties类型其实可以看成是Map类型的一种。Properties的键和值都只能是字符串。

类中的属性:

        private Properties mails;

	public void setMails(Properties mails) {
this.mails = mails;
}

配置:

<property name="mails">
<props>
<prop key="mailOfZhang">zhangsan_2013@163.com</prop>
<prop key="mailOfLi">Lixiaolong_abcxx@qq.com</prop>
</props>
</property>

第二章 IoC Setter注入的更多相关文章

  1. 转: 第二章 IoC Annotation注入

    http://blog.csdn.net/p_3er/article/details/9231307 1.命名空间 使用Annotation的方式,需要在spring的配置文件中配置命名空间.命名空间 ...

  2. Spring3实战第二章第二小节 IOC依赖注入 list和map集合

    Spring有多种依赖注入的形式,本篇文章仅介绍Spring通过xml进行IOC配置的方式. 1.Set注入 2.构造器注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new ...

  3. 第二章 IOC + AOP 底层原理

    <精通Spring4.x 企业应用开发实战>读书笔记 一.概念 IOC: 假设B类调用了A类,那么A类的对象的创建是由B类来实现: IOC是指将A对象的创建由容器来完成,并且将创建好的对象 ...

  4. 第二章 IoC

    什么是IoC 如何配置IOC Bean的生命周期 多环境配置 条件化配置Bean 什么是IOC? IOC有两层含义, 1.控制反转:将对象实例的创建与销毁的权限交给Spring容器管理,而不再是调用对 ...

  5. 《Spring技术内幕》笔记-第二章 IoC容器的实现

    简单介绍 1,在Spring中,SpringIoC提供了一个主要的JavaBean容器.通过IoC模式管理依赖关系.并通过依赖注入和AOP切面增强了为JavaBean这样子的POJO提供事务管理,生命 ...

  6. SPRING IN ACTION 第4版笔记-第二章-003-以Java形式注入Bean、@Bean的用法

    1. package soundsystem; import org.springframework.context.annotation.Bean; import org.springframewo ...

  7. Spring IOC三种注入方式(接口注入、setter注入、构造器注入)(摘抄)

    IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转, Spring 框架的核心基于控制反转原理. 什么是控制反转?控制反转是一种将组件依赖关系的创建和管理置于程序外部的技 ...

  8. Unity文档阅读 第二章 依赖注入

    Introduction 介绍Chapter 1 outlines how you can address some of the most common requirements in enterp ...

  9. SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较

    1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

随机推荐

  1. sql2008r2局域网复制订阅实操

    10.129.186.37 本机 10.129.186.95 服务器 局域网环境 复制类型:事务复制 注意点:要复制的表,必须有主键,否则不可选复制表. 要点1,局域网尝试用共享的方式保存快照文件夹, ...

  2. c语言,链表

    #include "stdafx.h" #include <stdio.h> #include <stdlib.h> struct Node{ struct ...

  3. saltstack:使用教程之一安装及客户端返回写入MySQL

    saltstack使用教程: 1.安装: 需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可: [epel] name=Extra ...

  4. 一天一个类,一点也不累之TreeSet

    一天一个类,一点也不累. 现在要说的是---TreeSet public class TreeSet<E> extends AbstractSet<E> implements ...

  5. pycURL的内存问题

    pycURL的内存问题 最近用pycURL写了一个工具,注册账号用的.写是写好了,但是发现内存占用超大.40个线程运行一天跑到了3.7G的内存. 于是着手调查这个问题. 调查方法就是用python的g ...

  6. PHP - 计算执行程序耗时

    效果: 首先在includes文件夹下编写,global.func.php函数库: <?php /* * Version:1.0 * CreateTime:2015年11月11日 * Autho ...

  7. QObject,有一个生存线程(慢慢体会)

     moveToThread本来就是操作QObject的    比如把当前对象移到主线程里: myObject->moveToThread(QApplication::instance()-> ...

  8. 分享一个获取代理ip的python函数

    分享一个获取代理ip的python函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #coding:utf-8 from bs4 import Beaut ...

  9. [Oracle]TRIGGER

    题外话: Oracle 的使用. 以前客户方用的是SQL SERVER,一直在用SQL SERVER,感觉SQL SERVER的用户体验非常好. 不管是开发环境的界面布局到SQL 的写法上,感觉写起来 ...

  10. SRM 223 Div II Level Two: BlackAndRed,O(N)复杂度

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=3457&rd=5869 解答分析:http://comm ...