什么是spring(转载)
spring是一個開源的java框架,集成了各種主流的技術包括web mvc,orm,ejb,rmi,javamail等 ,他就象一個粘合濟,在實際項目中,將前后臺程序粘合在一起,構建出一個完整的系統。
spring中的各個組件也可獨立使用,你可以在你的項目中選擇性的使用spring提供的某一部分功能
Spring的核心是ioc和aop
什么是IOC
Inversion of Control,控制反轉或反轉控制,其和另外一個概念DI-Dependency Injection依賴注入等價。
到底如何來理解IOC?
IOC確切的說,他是一種思想、概念,跟OOP是一種編程思想一樣,他是在大量的項目實踐中總結出來的一種精妙地程序設計思想。在原先的程序設計中,我們通常是通過new XXX(),其中,XXX就是某個類的名稱,在沒有ioc思想引入時,我們程序中大量充斥著new XXX()這樣的代碼。這些代碼都需要我們程序員手工編寫。而引入了ioc思想之后,對象的管理全部交給Spring這個容器來管理,當我們程序需要對應類的對象時,我們直接從Spring容器里面獲取,換句話說,就是Spring容器把產生好的對象交給了我們的程序,這種方式就叫做注入(就跟醫生拿著可怕的針管將液體注入到我們的屁股上一樣,為什么要注入,還不是你的屁股需要嘛!因為你需要,所以我給你,這就是DI)
而IOC的深層含義就是,將原先對象產生的主動權交給了Spring容器,由Spring容器來為我們完成對象的new的過程,并將對象在我們需要時交給我們。
Spring正是IOC思想的一個完美產物和實踐者!
什么是aop
Aspect Oriented Programming,面向方面編程,它也是一種編程思想,它是對OOP編程思想的一種升華
OOP強調的是對象,而aop強調的是面(不是餃子)
那么,什么是面?
如果拿我們的教室做比方,那么教室的前門和后窗就是一個面,一個截面,通過這樣的截面,將我們這塊空間分成了室內、窗外和門外三部分。
如果拿我們吃的漢堡做比方,那么漢堡的夾心的前后就是一個面,一個截面,通過這樣的截面,將我們的普通面包分成了面包上層、夾心、面包下層。
如果。。。
還是拿我們的程序代碼來說,
如果我們的dao用jdbc實現,那么在dao的每一個方法里都充斥著這樣的代碼,
打開連接
執行sql語句
關閉連接
那么,這時,我們就可以在執行sql前后做出一個截面,通過這樣的截面,將我們的程序代碼分開,將打開連接和關閉連接交給AOP去做,我們程序員只關注執行不同sql語句部分,避免了在dao的每個方法中都要編寫重復的打開連接和關閉連接代碼。
如果我們的dao用hibernate實現,那么在dao的每一個方法里都充斥著這樣的代碼
打開session
執行session動作
關閉session
同理,我們就可以在執行session動作前后做出一個截面,通過這樣的截面,將我們的程序代碼分開,將打開session和關閉session交給AOP去做,我們程序員只關注執行session動作,避免了代碼的重復豈不更好
這就是AOP,好好理解吧,那可是個漫長的思想體驗過程!祝你好運!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最近在網上看到很多人提問,關于spring 依賴注入有什么好處 ?以下是某人說的一句話:"我看了,好處就是說,如果某一天實現類變了,在xml里改一下就行了,可是用原始的java new關鍵字,我也可以改實現類,只要把new后面的類改掉就行,改xml和改java,工作量是一樣的,沒看出有啥好處,這個傳說中的注入的好處,沒感覺到啊"
??????? 看到這,我覺的對剛學spring的朋友都有這樣的誤解,其實不是這樣的。以下通過例子來說明下spring 依賴注入的好處
??
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 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層的組件已經進行徹底的解耦了。
?
依賴注入或者說是控制反轉,說白了就是使用了配置文件,這種思想的唯一好處就是增加了模塊的重用性靈活性。一般配置文件里存的都是數據,鍵值之類的。Spring的配置文件把要引用類和要給類傳的參數都放到配置文件里,這樣比以前寫死在程序里更靈活,因此更具重用性。
轉載于:https://www.cnblogs.com/hl756799782/archive/2011/07/18/6005322.html
總結
以上是生活随笔為你收集整理的什么是spring(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 让 UV4 支持STC 单片机
- 下一篇: poj 1308 Is It A Tre