如何理解spring的依赖注入

      

    假如  

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

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

   小卖部提供了会员服务,只要注册了会员的,都能打电话去,然后告诉服务员你需要什么水,小卖部就会自动的将货物送给你,这样你只需要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在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值