依赖注入的好处是什么?

今天看到一篇浅显易懂的好文章,转载收藏下:
原文章
最近在网上看到很多人提问,关于spring 依赖注入有什么好处 ?以下是某人说的一句话:“我看了,好处就是说,如果某一天实现类变了,在xml里改一下就行了,可是用原始的java new关键字,我也可以改实现类,只要把new后面的类改掉就行,改xml和改java,工作量是一样的,没看出有啥好处,这个传说中的注入的好处,没感觉到啊”

以一个小的实例解释:

public interface PersonDao {
  public void add();
 }
 创建一个PersonDao对象
public class PersonDaoBean implements PersonDao {
 public void add(){
  System.out.println("执行PersonDaoBean里的add()方法");
 }
}
public class PersonServiceBean implements PersonService {    
    private PersonDao personDao;    
        
    public PersonDao getPersonDao() {    
        return personDao;    
    }    
   
    public void setPersonDao(PersonDao personDao) {    
        this.personDao = personDao;    
    }    
        
    public void save(){    
        personDao.add();    
    }    
} 
xml文件
 
<?xml version="1.0" encoding="UTF-8"?>   
<beans xmlns="http://www.springframework.org/schema/beans"   
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
       xsi:schemaLocation="http://www.springframework.org/schema/beans    
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">   
           <bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>   
          <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean">   
            <property name="personDao" ref="personDao"></property>   
          </bean>   
</beans>  

大家可以看到,在服务层的这个类里面,我们并没有看到PersonDaoBean的身影,也就是说我们并不关心这个实现类是谁,我们通过PersonDao这个接口去引用注入进来的对象,在通过接口调用它的方法。这样的话,服务层的组件和DAO层的组件已经进行彻底的解耦了。

看这到后,可能朋友门会问,到底怎么解耦了?和new 有什么区别了.
先说new吧,如果项目很大,action很多,基本上你要调add()方法,你都要new 一次,但是因项目需求,可能要重新增加一个业务,把PersonDaoBean这业务换成,但是这个务务要把留,不能删掉。有可能到时会再换过来同时新增的类也要实现PersonDao接口的add()方法。那怎么办?如果用以前new 的方法,你在每个action中,就要把new 的对象都改一次对吧,如果用spring 依赖注入 就不用了.只要改要xml的文件就可以了

<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>   
 把以上的class改成新增的类就可,如果要换回来也方便,action的方法根本

就不用动了.不知道大家明白没有
  依赖注入或者说是控制反转,说白了就是使用了配置文件,这种思想的唯一好处就是增加了模块的重用性灵活性。一般配置文件里存的都是数据,键值之类的。Spring的配置文件把要引用类和要给类传的参数都放到配置文件里,
这样比以前写死在程序里更灵活,因此更具重用性。

以上是原文章。
到此,我再总结一下。
如果说不用spring技术了,我们所有的方法都写在 诸如 一个类里面,用new的方法,那么,我们每增加一个功能,都要全局去修改最初的类。现在,我们用了spring技术,
那么,我们想添加一些新的内容,只要添加一个类似的这个:

public class PersonDaoBean implements PersonDao {
 public void add(){
  System.out.println("执行PersonDaoBean里的add()方法");
 }
}

然后在XML文件里配置一下就行了。
接着我们在业务里面就可以使用复写实现类里的方法了

不晓得这样的理解是不是正确,感觉有些牵强了,这个地方好像就是多态的技术啊
哈哈哈…

先写到这了,后期如果有新的发现再改正吧
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值