Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2511747
  • 博文数量: 319
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3881
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(319)

文章存档

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: Java

2010-06-02 20:02:55

Spring的核心机制是依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。

下面通过简单的实例演示依赖注入。

项目中主要包含一下一个文件:

 

UserDAO是一个接口,包含了一个方法:

Java代码
  1. package com.szy.spring.dao;   
  2.   
  3. public interface UserDAO   
  4. {   
  5.     void show();   
  6. }  

 

而UserDAO4MySqlImpl和UserDAO4OracleImpl实现了UserDAO中的方法。

Java代码
  1. package com.szy.spring.dao;   
  2. public class UserDAO4MySqlImpl implements UserDAO   
  3. {   
  4.     public void show()   
  5.     {   
  6.         System.out.println("MySqlDAO Implement");   
  7.     }   
  8. }  
Java代码
  1. package com.szy.spring.dao;   
  2. public class UserDAO4OracleImpl implements UserDAO   
  3. {   
  4.     public void show()   
  5.     {   
  6.         System.out.println("OracleDAO Implement");   
  7.     }   
  8. }  

UserService是另外一个包中的接口,

Java代码
  1. package com.szy.spring.service;   
  2.   
  3. public interface UserService   
  4. {   
  5.     void show();   
  6. }  

UserServiceImpl实现了这个接口,

Java代码
  1. package com.szy.spring.service;   
  2.   
  3. import com.szy.spring.dao.UserDAO;   
  4.   
  5. public class UserServiceImpl implements UserService   
  6. {   
  7.     private UserDAO userDAO;   
  8.        
  9.     public void show()   
  10.     {   
  11.         userDAO.show();   
  12.     }   
  13.   
  14.     public UserDAO getUserDAO()   
  15.     {   
  16.         return userDAO;   
  17.     }   
  18.     public void setUserDAO(UserDAO userDAO)   
  19.     {   
  20.         this.userDAO = userDAO;   
  21.     }   
  22. }  

 但是在实现这个接口中,调用了UserDAO中的方法。一般情况下我们需要在这里实例化一个UserDAO对象,比如

Java代码
  1. UserDAO userDAO=new UserDAO4MySqlImpl();  

 这样的话耦合度就比较高,通过spring我们可以降低耦合度。

在Sping的配置文件中,我们需要这样配置

Java代码
  1. "1.0" encoding="UTF-8"?>   
  2. ""  
  3.     xmlns:xsi=""  
  4.     xmlns:context=""  
  5.     xmlns:tx=""  
  6.     xsi:schemaLocation="http://www.springframework.org/schema/beans /spring-beans-2.5.xsd   
  7.                 http://www.springframework.org/schema/context /spring-context-2.5.xsd   
  8.                 http://www.springframework.org/schema/tx /spring-tx-2.5.xsd">   
  9.     "mySqlDAO" class="com.szy.spring.dao.UserDAO4MySqlImpl"/>   
  10.     "oracleDAO" class="com.szy.spring.dao.UserDAO4OracleImpl"/>   
  11.     "userService" class="com.szy.spring.service.UserServiceImpl">   
  12.            
  13.         "userDAO" ref="oracleDAO">   
  14.        
  15.   

下面我们测试

Java代码
  1. ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");      
  2.         UserService service=(UserService)ctx.getBean("userService");   
  3.         service.show();  

输入内容为

输出代码
  1. OracleDAO Implement  

 如果我们想实用Mysql数据库呢? 

此时我们只要修改配置文件即可,而不需要修改Java文件。

Xml代码
  1. <property name="userDAO" ref="mySqlDAO">property>  
  • (2.6 MB)
阅读(1086) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~