關(guān)于Spring 依賴注入有什么好處
最近在網(wǎng)上看到很多人提問,關(guān)于spring 依賴注入有什么好處 ?以下是某人說的一句話:"我看了,好處就是說,如果某一天實現(xiàn)類變了,在xml里改一下就行了,可是用原始的java new關(guān)鍵字,我也可以改實現(xiàn)類,只要把new后面的類改掉就行,改xml和改java,工作量是一樣的,沒看出有啥好處,這個傳說中的注入的好處,沒感覺到啊"看到這,我覺的對剛學(xué)spring的朋友都有這樣的誤解,其實不是這樣的。以下通過例子來說明下spring 依賴注入的好處
public interface PersonDao {
?public void add();
}
創(chuàng)建一個PersonDao對象
public class PersonDaoBean implements PersonDao
?{
? public void add()
{
? System.out.println("執(zhí)行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>??
大家可以看到,在服務(wù)層的這個類里面,我們并沒有看到PersonDaoBean的身影,也就是說我們并不關(guān)心這個實現(xiàn)類是誰,我們通過PersonDao這個接口去引用注入進來的對象,在通過接口調(diào)用它的方法。這樣的話,服務(wù)層的組件和DAO層的組件已經(jīng)進行徹底的解耦了。
看這到后,可能朋友門會問,到底怎么解耦了?和new 有什么區(qū)別了.
先說new吧,如果項目很大,action很多,基本上你要調(diào)add()方法,你都要new 一次,但是因項目需求,可能要重新增加一個業(yè)務(wù),把PersonDaoBean這業(yè)務(wù)換成,但是這個務(wù)務(wù)要把留,不能刪掉。有可能到時會再換過來同時新增的類也要實現(xiàn)PersonDao接口的add()方法。那怎么辦?如果用以前new 的方法,你在每個action中,就要把new 的對象都改一次對吧,如果用spring 依賴注入 就不用了.只要改要xml的文件就可以了
<bean id="personDao" class="cn.itcast.dao.impl.PersonDaoBean"></bean>? ?
把以上的class改成新增的類就可,如果要換回來也方便,action的方法根本就不用動了.不知道大家明白沒有
依賴注入或者說是控制反轉(zhuǎn),說白了就是使用了配置文件,這種思想的唯一好處就是增加了模塊的重用性靈活性。一般配置文件里存的都是數(shù)據(jù),鍵值之類的。Spring的配置文件把要引用類和要給類傳的參數(shù)都放到配置文件里,
這樣比以前寫死在程序里更靈活,因此更具重用性。
?
原文地址:?https://blog.csdn.net/hanxiaoshuang123/article/details/7471294
?
?
?