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. HFS - 简单的将个人电脑变服务器!

    网络硬盘   HTTP File Server(HFS)是我目前所知道的最简便的P2P文件分享方式,只一个大小为559KB的单文件绿色软件(hfs.exe)就可以在瞬间不经过任何系统设置将一台普通的联 ...

  2. BZOJ 2427: [HAOI2010]软件安装( dp )

    软件构成了一些树和一些环, 对于环我们要不不选, 要么选整个环. 跑tarjan缩点后, 新建个root, 往每个入度为0的点(强连通分量) 连边, 然后跑树dp( 01背包 ) ---------- ...

  3. 信号与槽(可以与第三方库混用,首次见到QObject::destroyed的使用)

    信号与槽用于对象之间的通信.信号与槽机制是Qt的核心特性和区别于其他框架的特性. Introduction 在GUI程序中,当我们改变一个widget,经常需要其他的widget得到通知.更普遍的是, ...

  4. [教程]安装青鸟云Web服务器

    青鸟云Web服务器 支持的安装环境: Windows XP (32bit) Windows Server 2003/R2 (32bit) Windows 7 (32/64bit) Windows Se ...

  5. AT&T汇编

    AT&T汇编和8086汇编语言虽然两者很相似,但是还是不能根据8086的语法规则来读AT&T汇编的吧,所以还是要看看AT&T汇编的语法规则,因为在读内核代码时,跟硬件打交道的部 ...

  6. ZOJ 3829 Known Notation 乱搞

    乱搞: 1.数字的个数要比*的个数多一个,假设数字不足须要先把数字补满 2.最优的结构应该是数字都在左边,*都在右边 3.从左往右扫一遍,遇到数字+1,遇到*-1,假设当前值<1则把这个*和最后 ...

  7. ffmpeg中ff_scale_image()内存泄露

    版本:ffmpeg1.2         int    ff_scale_image( uint8_t *dst_data[4], int dst_linesize[4],               ...

  8. linux命令: mount

    mount使用示例: #mkdir -p /mnt/usbhd1 注:建立目录用来作挂接点(mount point) #mount -t ntfs /dev/sdc1 /mnt/usbhd1 (-t ...

  9. Windows Services的1053错误的解决办法之一:修改注册表允许的响应时间

    Error: 'The service did not respond in a timely fashion' (ServicesPipeTimeout) when attempting when ...

  10. WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?

    原文 WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下? 一.问题的提出 偶然发现,Winform里的WebBrowser和IE实际安装的版本似乎并不同步,很有趣! 下 ...