7.1 IOC (inversion of control) – 反轉控制 1) 之前我們在學JSP的時候,在CoreServlet中,我們創建xxxDao對象是如何創建的? IXxxDao xxxDao = new XxxDaoImpl( ) ; 這種寫法new了一個XxxDaoImpl類,這樣使 ...
7.1 IOC (inversion of control) – 反轉控制
1) 之前我們在學JSP的時候,在CoreServlet中,我們創建xxxDao對象是如何創建的?
IXxxDao xxxDao = new XxxDaoImpl( ) ;
這種寫法new了一個XxxDaoImpl類,這樣使得CoreServlet和Dao耦合了。
而且IXxxDao xxxDao = new XxxDaoImpl( ) ; 這句代碼
如果出現在CoreServlet的某個方法內部,那麼xxxDao這個對象的生命周期就是方法的級別。
如果出現在CoreServlet的類中,也就是說xxxDao是一個屬性,那麼這個xxxDao的生命周期就伴隨著CoreServletServlet的生命周期這個級別。
2) 之後我們在applicationContext.xml中定義了這個empService和empDao,然後通過解析XML和反射機制,產生EmpServiceImpl 和 EmpDaoImpl類的對象,然後存在一個map容器當中(map容器在BeanFactory中)。
因此,我們改變了之前service,dao等實例對象的生命周期,控制權從程式員轉移到BeanFactory。所以BeanFactory我們可以稱為IOC容器。
7.2 DI - Dependency Injection 依賴註入
1)之前,我們在控制層出現的代碼:IEmpService empService = new EmpServiceImpl( );那麼,控制層和servcie層存在耦合。
2)之後,我們將代碼修改成IEmpService empService = null; 然後,在配置文件中配置。
以前是主動new出來的,現在是IOC容器給我們new出來後,通過依賴關係給我們註入的。
當然註入可以通過三種方式來註入:1)屬性直接賦值 2)setXxx方法3)構造方法。我們採用的是第一種。