Spring学习笔记(5)----依赖注入的简单实现
时间:2010-06-02 来源:mcuflower
Spring的核心机制是依赖注入。依赖注入让bean与bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。
下面通过简单的实例演示依赖注入。
项目中主要包含一下一个文件:
UserDAO是一个接口,包含了一个方法:
Java代码- package com.szy.spring.dao;
- public interface UserDAO
- {
- void show();
- }
而UserDAO4MySqlImpl和UserDAO4OracleImpl实现了UserDAO中的方法。
Java代码- package com.szy.spring.dao;
- public class UserDAO4MySqlImpl implements UserDAO
- {
- public void show()
- {
- System.out.println("MySqlDAO Implement");
- }
- }
- package com.szy.spring.dao;
- public class UserDAO4OracleImpl implements UserDAO
- {
- public void show()
- {
- System.out.println("OracleDAO Implement");
- }
- }
UserService是另外一个包中的接口,
Java代码- package com.szy.spring.service;
- public interface UserService
- {
- void show();
- }
UserServiceImpl实现了这个接口,
Java代码- package com.szy.spring.service;
- import com.szy.spring.dao.UserDAO;
- public class UserServiceImpl implements UserService
- {
- private UserDAO userDAO;
- public void show()
- {
- userDAO.show();
- }
- public UserDAO getUserDAO()
- {
- return userDAO;
- }
- public void setUserDAO(UserDAO userDAO)
- {
- this.userDAO = userDAO;
- }
- }
但是在实现这个接口中,调用了UserDAO中的方法。一般情况下我们需要在这里实例化一个UserDAO对象,比如
Java代码- UserDAO userDAO=new UserDAO4MySqlImpl();
这样的话耦合度就比较高,通过spring我们可以降低耦合度。
在Sping的配置文件中,我们需要这样配置
Java代码- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
- <bean id="mySqlDAO" class="com.szy.spring.dao.UserDAO4MySqlImpl"/>
- <bean id="oracleDAO" class="com.szy.spring.dao.UserDAO4OracleImpl"/>
- <bean id="userService" class="com.szy.spring.service.UserServiceImpl">
- <!--构造方法注入
- <property name="userDAO" ref="mySqlDAO"></property>
- -->
- <property name="userDAO" ref="oracleDAO"></property>
- </bean>
- </beans>
下面我们测试
Java代码- ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
- UserService service=(UserService)ctx.getBean("userService");
- service.show();
输入内容为
输出代码- OracleDAO Implement
如果我们想实用Mysql数据库呢?
此时我们只要修改配置文件即可,而不需要修改Java文件。
Xml代码- <property name="userDAO" ref="mySqlDAO"></property>
- spring.rar (2.6 MB)