您的位置:首页 > 编程语言 > Java开发

如何理解spring的依赖注入

2014-03-27 18:03 85 查看
假如

我现在口很渴, 我需要喝水 那么我就需要先到小区小卖部去问 有没有我要喝的水 我是步行还是开车去 等等因素

也就是我为了一瓶水 我还要依赖其他的工具 这样 问题就变得很复杂了 怎么解决呢

小卖部提供了会员服务 只要注册了会员的 都能打电话去 然后告诉服务员 你需要什么水 小卖部就会自动的将货物送给你

这样你只需要2步

1. 去小卖部注册一个会员

2.你需要什么样的水

然后小卖部就会给你送什么样的水给你

在spring的思想中 也是这样的 Spring就是小卖部 我就是客户对象A 水就是商品B

在Spring中声明一个客户对象A 然后再告诉spring 客户对象A需要商品对象B

配置文件中 比如

<bean id="userService" class="org.leadfar.service.UserService"/><bean id="documentService" class="org.leadfar.service.DocumentService"/><bean id="orgService" class="org.leadfar.service.OrgService"/>

<bean id="userAction" class="org.leadfar.web.UserAction"> <property name="userService" ref="userService"/></bean>

在Spring这个商店(工厂)中,有很多对象/服务:userService,documentService,orgService,也有很多会员:userAction等等,声明userAction需要userService即可,Spring将通过你给它提供的通道主动把userService送上门来,因此UserAction的代码示例类似如下所示:

package org.leadfar.web;

public class UserAction{

private UserService userService;

public String login(){

userService.valifyUser(xxx);

}

//提供set方法注入spring

public void setUserService(UserService userService){

this.userService = userService;

}

}

在这段代码里面,你无需自己创建UserService对象(Spring作为背后无形的手,把UserService对象通过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!)

Spring依赖注入的实现技术是:动态代理

public void setUserService(UserService userService){

this.userService = userService;

}

}

在这段代码里面,你无需自己创建UserService对象(Spring作为背后无形的手,把UserService对象通过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!)

Spring依赖注入的实现技术是:动态代理

再说说AOP,即面向切面编程,面向切面编程的目标就是分离关注点。什么是关注点呢,就是你要做的事,就是关注点。假如你是个公子哥,没啥人生目标,天天就是衣来伸手,饭来张口,整天只知道玩一件事!那么,每天你一睁眼,就光想着吃完饭就去玩(你必须要做的事),但是在玩之前,你还需要穿衣服、穿鞋子、叠好被子、做饭等等等等事情,这些事情就是你的关注点,但是你只想吃饭然后玩,那么怎么办呢?这些事情通通交给别人去干。在你走到饭桌之前,有一个专门的仆人A帮你穿衣服,仆人B帮你穿鞋子,仆人C帮你叠好被子,仆人C帮你做饭,然后你就开始吃饭、去玩(这就是你一天的正事),你干完你的正事之后,回来,然后一系列仆人又开始帮你干这个干那个,然后一天就结束了!

AOP的好处就是你只需要干你的正事,其它事情别人帮你干。也许有一天,你想裸奔,不想穿衣服,那么你把仆人A解雇就是了!也许有一天,出门之前你还想带点钱,那么你再雇一个仆人D专门帮你干取钱的活!这就是AOP。每个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。

从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: