A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-zhangping 中级黑马   /  2012-10-20 19:53  /  1083 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

依赖注入的好处是?

1 个回复

倒序浏览
一个例子你就应该很明白了

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.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的配置文件把要引用类和要给类传的参数都放到配置文件里,
这样比以前写死在程序里更灵活,因此更具重用性。


评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马