1. 程式人生 > 其它 >spring核心概念IOC和AOP

spring核心概念IOC和AOP

  IOC是spring的兩大核心概念之一,IOC給我們提供了一個IOCbean容器,這個容器會幫我們自動去建立物件,不需要我們手動建立,IOC實現建立的通過DI(Dependency Injection 依賴注入),我們可以通過寫Java註解程式碼或者是XML配置方式,把我們想要注入物件所依賴的一些其他的bean,自動的注入進去,他是通過byName或byType型別的方式來幫助我們注入。正是因為有了依賴注入,使得IOC有這非常強大的好處,解耦。
  可以舉個例子,JdbcTemplate 或者 SqlSessionFactory 這種bean,如果我們要把他注入到容器裡面,他是需要依賴一個數據源的,如果我們把JdbcTemplate 或者 Druid 的資料來源強耦合在一起,會導致一個問題,當我們想要使用jdbctemplate必須要使用Druid資料來源,那麼依賴注入能夠幫助我們在Jdbc注入的時候,只需要讓他依賴一個DataSource介面,不需要去依賴具體的實現,這樣的好處就是,將來我們給容器裡面注入一個Druid資料來源,他就會自動注入到JdbcTemplate如果我們注入一個其他的也是一樣的。比如說c3p0也是一樣的,這樣的話,JdbcTemplate和資料來源完全的解耦了,不強依賴與任何一個數據源,在spring啟動的時候,就會把所有的bean全部建立好,這樣的話,程式在執行的時候就不需要建立bean了,執行速度會更快,還有IOC管理bean的時候預設是單例的,可以節省時間,提高效能。

 

 

  AOP:在工作當中會遇到很多重複性的程式碼,比如說事務,日誌,我們需要在很多類裡面把這些程式碼同時全部寫進去,這樣非常麻煩,比如說事務,我們要在所有的service層中開啟事務,提交回滾。

  可以不可以不這麼麻煩,AOP就給我們提供了這些方式,我們可以把這些公共有的程式碼切入到我們想切入的類裡面,這樣極大的方便了我們程式碼的書寫,提高了程式碼的複用性,也是一種解耦合的思想。

  當然AOP是依賴動態代理實現的,如果要代理的一個物件他有介面,那就使用java原生的動態代理來實現動態代理的建立,如果他沒有實現任何介面,他會實現一個CGLIB的技術來進行動態代理類的建立。

  在日常工作當中最常用的就是事務和日誌。