Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2794272
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: 系统运维

2012-03-08 10:54:20

上一篇已经讲过spring的核心控制反转IOC,这一篇讲另一核心DI
使用构造函数依赖注入时,Spring保证所有一个对象所有依赖的对象先实例化后,才实例化这个对象。(没有他们就没有我原则)。 通过构造函数的注入方式其实表达了2个对象间的一种强的聚合关系:组合关系, 就比如一辆车如果没有轮子、引擎等部件那么车也就不存在了。  “构造函数注入”可以保证合作者先创建,在后在创建自己。 

使用set方法依赖注入时,Spring首先实例化对象,然后才实例化所有依赖的对象。通过set方法注入的方式表达了2个对象间较弱的依赖关系:聚合关系, 就像一辆车,如果没有车内音像车也时可以工作的。当你不要求合作者于自己被创建时,“set方法注入”注入比较合适。

在spring中,spring并不会把无效的合作者传递给一个 bean。如果合作者无效或不存在spring会抛出异常,这样spring保证一个对象的合作者都是可用的。所以在spring中,“构造函数注入”和 “set方法注入”唯一的区别在于2种方式创建合作者的顺序不同。  
1、使用构造器注入
  1. package cn.itcast.service.impl;

  2. import cn.itcast.dao.PersonDao;
  3. import cn.itcast.service.PersonService;

  4. public class PersonServiceBean implements PersonService {
  5.     private PersonDao personDao;
  6.     private String name;    
  7.     
  8.     public void setPersonDao(PersonDao personDao) {
  9.         this.personDao = personDao;
  10.     }

  11.     public PersonServiceBean(){}
  12.      //配置文件index的值,第一个0,第二个1
  13.     public PersonServiceBean(PersonDao personDao, String name) {
  14.         this.personDao = personDao;
  15.         this.name = name;
  16.     }

  17.     public void save(){
  18.         System.out.println(name);
  19.         personDao.add();
  20.     }
  21. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns=""
  3.        xmlns:xsi=""
  4.        xmlns:context=""
  5.        xsi:schemaLocation="
  6.            /spring-beans-2.5.xsd
  7.             /spring-context-2.5.xsd">
  8.           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
  9.               <constructor-arg index="0" type="cn.itcast.dao.PersonDao" ref="personDao"/>
  10.               <constructor-arg index="1" value="传智播客"/>      
  11.           </bean>
  12. </beans>
index,是构造函数里的参数注入顺序,基本类型string 可以省略type

2、使用属性注入(喜欢用这种)
基本类型注入
  1. <bean id="orderService" class="cn.itcast.service.OrderServiceBean">
  2.     <constructor-arg index=“0” type=“java.lang.String” value=“xxx”/>//构造器注入
  3.     <property name=“name” value=“zhao/>//属性setter方法注入
  4. </bean>
注入依赖对象,可以通过内部类
  1. 方式一
  2. <bean id="orderDao" class="cn.itcast.service.OrderDaoBean"/>
  3. <bean id="orderService" class="cn.itcast.service.OrderServiceBean">
  4.     <property name="orderDao" ref="orderDao"/>
  5. </bean>
  6. 方式二(使用内部bean,但该bean不能被其他bean使用)
  7. <bean id="orderService" class="cn.itcast.service.OrderServiceBean">
  8.     <property name="orderDao">
  9.         <bean class="cn.itcast.service.OrderDaoBean"/>
  10.     </property>
  11. </bean>

集合类型的装配
接口的定义与实现该接口,在实现该接口时注入数据,接口只要定义get 方法
  1. package cn.itcast.service;

  2. import java.util.List;
  3. import java.util.Map;
  4. import java.util.Properties;
  5. import java.util.Set;
  6. public interface PersonService {
  7.     public Set<String> getSets();
  8.     public void save();
  9.     public List<String> getLists();
  10.     public Properties getProperties() ;
  11.     public Map<String, String> getMaps();

  12. }


  13. package cn.itcast.service.impl;

  14. import java.util.ArrayList;
  15. import java.util.HashMap;
  16. import java.util.HashSet;
  17. import java.util.List;
  18. import java.util.Map;
  19. import java.util.Properties;
  20. import java.util.Set;

  21. import cn.itcast.service.PersonService;

  22. public class PersonServiceBean implements PersonService {
  23.     private Set<String> sets = new HashSet<String>();
  24.     private List<String> lists = new ArrayList<String>();
  25.     private Properties properties = new Properties();
  26.     private Map<String, String> maps = new HashMap<String, String>();
  27.     
  28.     public Map<String, String> getMaps() {
  29.         return maps;
  30.     }

  31.     public void setMaps(Map<String, String> maps) {
  32.         this.maps = maps;
  33.     }

  34.     public Properties getProperties() {
  35.         return properties;
  36.     }

  37.     public void setProperties(Properties properties) {
  38.         this.properties = properties;
  39.     }

  40.     public Set<String> getSets() {
  41.         return sets;
  42.     }

  43.     public void setSets(Set<String> sets) {
  44.         this.sets = sets;
  45.     }

  46.     public List<String> getLists() {
  47.         return lists;
  48.     }

  49.     public void setLists(List<String> lists) {
  50.         this.lists = lists;
  51.     }

  52.     public void save(){
  53.         
  54.     }
  55. }

配置文件如下:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns=""
  3.        xmlns:xsi=""
  4.        xsi:schemaLocation="
  5.            /spring-beans-2.5.xsd">
  6.           <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">
  7.               <property name="sets">
  8.                   <set>
  9.                       <value>第一个</value>
  10.                       <value>第二个</value>
  11.                       <value>第三个</value>
  12.                   </set>
  13.               </property>
  14.               <property name="lists">
  15.                   <list>
  16.                       <value>第一个list元素</value>
  17.                       <value>第二个list元素</value>
  18.                       <value>第三个list元素</value>
  19.                   </list>
  20.               </property>
  21.               <property name="properties">
  22.                   <props>
  23.                       <prop key="key1">value1</prop>
  24.                       <prop key="key2">value2</prop>
  25.                       <prop key="key3">value3</prop>
  26.                   </props>
  27.               </property>
  28.               <property name="maps">
  29.                   <map>
  30.                       <entry key="key-1" value="value-1"/>
  31.                       <entry key="key-2" value="value-2"/>
  32.                       <entry key="key-3" value="value-3"/>
  33.                   </map>
  34.               </property>
  35.           </bean>
  36. </beans>





阅读(398) | 评论(1) | 转发(0) |
0

上一篇:spring2.5学习连载 前言

下一篇:java BitSet

给主人留下些什么吧!~~

nba76ers2012-03-08 11:10:47

用熟set 方法注入就行啦

面向接口编程有利于修改,所以声明的时候用接口,然后在实现类注入数据