spring的IoC介绍

Spring是j2ee领域比较出名的一个应用框架,其中包括AOP、IoC/DI、MVC等方面的应用,而且可以灵活的根据项目情况来是用它的一部分。在所有内容中,IoC/DI(反向控制,依赖注入)是比较好的一个东西。

注:什么是依赖注入?

面向对象的一个基础叫做基于/面向接口编程,即将接口与实现分离,对象之间的协作、依赖完全靠接口实现;

在传统的实现方式中,依赖被硬编码到代码中,如UserService依赖UserDAO,即UserService中需要创建UserDAO的事例;

DI(Depand injection)的引入即在编码阶段不比直接创建UserDAO的事例,紧紧需要声明UserService依赖IUserDAO的接口(当然UserDAO要实现这个接口),这样就彻底将实现、接口分离,而且将对象之间的依赖转换为对象与抽象接口之间的关联;

DI当然不会自己晓得对象之间的联系,所以需要一个配置文件来声明各个对象之间的联系,同时UserService需要提供一个setter(即,属性的set子句),DI容器会根据配置文件在运行时利用setter为对象创建所依赖的对象的事例,同时利用setter方法将被依赖对象事例赋予根对象。这里的情况是容器(或称框架,容器这个词更加通用些)首先创建UserSerivce的事例,然后依据配置文件,创建其所依赖的UserDAO的事例,然后调用UserService事例的setUserDAO方法(实际的C#代码为srv.UserDAO=objUserDAO;实际上这条语句所转化的msidl语言代码是srv.set_UserDAO(objUserDAO);)。

代码示例:

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="userDAO" class="onest.dao.UserDAO" abstract="false" singleton="true" lazy-init="default" autowire="default" dependency-check="default"></bean>
</beans>

程序代码:

public interface IUserDAO

{

public UserData getById(int userId);

}

public class UserService

{

private IUserDAO userDao;

public UserDAO

{

set

{

userDao = value;

}

}

public UserData getById(int userId)

{

return userDao.getById(userId);

}

}

public class UserDAO:IUserDAO

{

public UserData getById(int userId)

{

.....

}

}

除了DI之外,声明式事务处理以及ServiceLocator、ServiceProxy更令人感兴趣。

一些心得不敢独享..

P.S.代码用了类似C#的语法,因为这是给C#开发人员的一个入门介绍。Springframework.net已经可以发布了,不过还没有深入研究:(

转载于:https://www.cnblogs.com/Ankh/archive/2006/07/26/460162.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值