review:
? ? 1.Servlet生命周期中初始化方法:init(),init(config)
? ? ? ? public void init(ServletConfig config) throws ServletException {
? ? ? ? ? ? this.config = config;
? ? ? ? ? ? this.init();
? ? ? ? }
? ? ? ? 因此,如果我們需要在初始化時執行一些自定義操作,那么我們可以重寫無參init()方法
? ? ? ? 我們可以通過gitConfig()獲取ServletConfig對象
? ? ? ? 可以通過config.getInitParameter()獲取初始化參數
? ? 2、通過ServletContext獲取配置的上下文參數
? ? 3、MVC:V:view視圖;c:Controller控制器;M:Model模型
? ? ? ? 模型有很多種類:數據訪問模型(DAO);業務邏輯模型(BO);值對象模型(POJO);數據傳輸對象(DTO)
? ? 4、IOC
? ? ? ? IOC控制反轉/DI依賴注入
? ? ? ? 控制反轉:
? ? ? ? ? ? 1)之前在Servlet中,我們創建Service對象,FruitService fruitService = new FruitServiceImpl();
? ? ? ? ? ? ? ? 如果這句話出現在Servlet某個方法內部,那么這個fruitService的作用域(生命周期)應該就是這個方法級別
? ? ? ? ? ? ? ? 如果這句話出現在servlet類中,也就是說fruitService是一個成員變量,那么這個fruitService的作用域(生命周期)應該就是這個servlet實例級別
? ? ? ? ? ? 2)之后我們在applicationContext.xml中定義了這個fruitService。然后通過解析XML,產生fruitService實例,存放在beanMap中,
? ? ? ? ? ? ? ?這個在一個BeanFactory中
? ? ? ? ? ? ? ?因此我們轉移(改變)了之前的service實例、dao實例等等他們的生命周期。控制權從程序員轉移到了BeanFactory中。
? ? ? ? ? ? ? ?這個現象我們就叫做控制反轉
? ? ? ? 依賴注入:
? ? ? ? ? ? 1)之前我們在控制層出現代碼是這樣寫FruitService fruitService = new FruitServiceImpl();
? ? ? ? ? ? ? ? 那么控制層和service層存在耦合
? ? ? ? ? ? 2)之后我們修改為FruitService fruitService = null;
? ? ? ? ? ? ? ? 然后在配置文件中配置:
? ? ? ? ? ? ? ? <beans>
? ? ? ? ? ? ? ? ? ? <bean id="fruitDao" class="com.wenrui.fruit.dao.impl.FruitDaoImpl"/>
? ? ? ? ? ? ? ? ? ? <bean id="fruitService" class="com.wenrui.fruit.service.impl.FruitServiceImpl">
? ? ? ? ? ? ? ? ? ? ? ? <!--property標簽用來表示屬性,name表示屬性名,ref表示引用其他bean的id值-->
? ? ? ? ? ? ? ? ? ? ? ? <property name="fruitDao" ref="fruitDao" />
? ? ? ? ? ? ? ? ? ? </bean>
? ? ? ? ? ? ? ? ? ? <!--這個bean標簽的作用是:將來servletpath中涉及名字是fruit,那么就要找FruitController這個類來處理-->
? ? ? ? ? ? ? ? ? ? <bean id="fruit" class="com.wenrui.fruit.controllers.FruitController">
? ? ? ? ? ? ? ? ? ? ? ? <property name="fruitService" ref="fruitService" />
? ? ? ? ? ? ? ? ? ? </bean>
? ? ? ? ? ? ? ? </beans>