javaEE企業級開發理論題庫(一)
1.
請簡述什么是 Spring 的 IoC 和 DI?
答案:
IoC 的全稱是 Inversion of Control,中文名稱為控制反轉----->控制反轉就是指在使用 Spring 框架之后,對象的實例不再由調 用者來創建,而是由 Spring 容器來創建,Spring 容器會負責控制程序之間的關系,而不是由調用者的程序代碼直接控制。這 樣,控制權由應用代碼轉移到了 Spring 容器,控制權發生了反轉。
DI 的全稱是 Dependency Injection,中文稱之為依賴注入。它與控制反轉(IoC)的含義相同,只不過這兩個稱呼是從兩 個角度描述的同一個概念。從 Spring 容器的角度來看,Spring 容器負責將被依賴對象賦值給調用者的成員變量,這相當于為 調用者注入了它依賴的實例,這就是 Spring 的依賴注入。
2.
請簡述 Bean 的生命周期。
答案:
Bean 的生命周期的整個執行過程描述如下:
?。?)根據配置情況調用 Bean 構造方法或工廠方法實例化 Bean。
(2)利用依賴注入來完成 Bean 中所有屬性值的配置注入Spring 中的 Bean
(3)如果 Bean 實現了 BeanNameAware 接口,則 Spring 調用 Bean 的 setBeanName()方法傳入當前 Bean 的 id 值。
(4)如果 Bean 實現了 BeanFactoryAware 接口,則 Spring 調用 setBeanFactory()方法傳入當前工廠實例的引用。
( 5 )如果 Bean 實現了 ApplicationContextAware 接 口 , 則 Spring 調 用 setApplicationContext() 方 法 傳 入 當 前 ApplicationContext 實例的引用。
(6)如果 BeanPostProcessor 和 Bean 關聯,則 Spring 將調用該接口的預初始化方法 postProcessBeforeInitialzation()對 Bean 進行加工操作,這個非常重要,Spring 的 AOP 就是用它實現的。
?。?)如果 Bean 實現了 InitializingBean 接口,則 Spring 將調用 afterPropertiesSet()方法 (8)如果在配置文件中通過 init-method 屬性指定了初始化方法,則調用該初始化方法。
?。?)如果有 BeanPsostProcessor 和 Bean 關聯,則 Spring 將調用該接口的初始化方法 postProcessAfterInitialization()。此 時,Bean 已經可以被應用系統使用了。
?。?0)如果在<bean> 中指定了該 Bean 的作用范圍為 scope="singleton",則將該 Bean 放入 Spring IoC 的緩存池中,將觸 發 Spring 對該 Bean 的生命周期管理;如果在<bean>中指定了該 Bean 的作用范圍為 scope="prototype",則將該 Bean 交給調用 者,調用者管理該 Bean 的生命周期,Spring 不再管理該 Bean。
?。?1)如果 Bean 實現了 DisposableBean 接口,則 Spring 會調用 destory()方法將 Spring 中的 Bean 銷毀;如果在配置文件 中通過 destory-method 屬性指定了 Bean 的銷毀方法,則 Spring 將調用該方法進行銷毀。
3.
請列舉你所知道的 Spring 的通知類型并解釋。
答案:
Spring 中的通知按照在目標類方法的連接點位置,可以分為以下 5 種類型:
?。?)org.aopalliance.intercept.MethodInterceptor(環繞通知) 在目標方法執行前后實施增強,可以應用于日志、事務管理等功能。
?。?)org.springframework.aop.MethodBeforeAdvice(前置通知) 在目標方法執行前實施增強,可以應用于權限管理等功能。
?。?)org.springframework.aop.AfterReturningAdvice(后置通知) 在目標方法執行后實施增強,可以應用于關閉流、上傳文件、刪除臨時文件等功能。
(4)org.springframework.aop.ThrowsAdvice(異常通知) 在方法拋出異常后實施增強,可以應用于處理異常記錄日志等功能。
(5)org.springframework.aop.IntroductionInterceptor(引介通知) 在目標類中添加一些新的方法和屬性,可以應用于修改老版本程序(增強類)
4.
簡述 Spring MVC 的請求處理流程。
答案:
?。?)首先用戶發送請求到前端控制器(DispatcherServlet),前端控制器根據請求信息(比如:URL)來決定選擇哪個頁 面控制器(Controller)來進行處理,并把請求委托給它,即:Serlvet 控制器的控制邏輯部分
?。?)頁面控制器接收到請求后,進行業務處理,處理完畢后返回一個 ModelAndView(模型數據和邏輯視圖名)
?。?)前端控制器收回控制權,然后根據返回的邏輯視圖名,選擇相應的真正視圖,并把模型數據傳入以便視圖渲染展示
?。?)前端控制器再次收回控制權,將結果響應返回給用戶,至此整個流程結束
5.
請簡述簡單數據類型中的@RequestParam 注解及其屬性作用。
答案:
@RequestParam 注解主要用于對請求中的參數進行定義,多用于在請求參數名與方法形參名不一致時的參數間接綁定。 在使用時可以指定他的 4 個屬性,具體如下:
?。?)value:name 屬性的別名,這里指參數的名字,即入參的請求參數名字,如果只使用 vaule 屬性,則可以省略 value 屬性名。
?。?)name:用于指定請求頭綁定的名稱。
6.
請簡述 MapperFactoryBean 和 MapperScannerConfigurer 的作用。
答案:
MapperFactoryBean 是 MyBatis-Spring 團隊提供的一個用于根據 Mapper 接口生成 Mapper 對象的類,通過 MapperFactoryBean 可以配置接口文件以及注入 SqlSessionfactory,從而完成一個 Bean 的實例化。
MapperScannerConfigurer 是 MyBatis-Spring 團隊提供的一種用于以自動掃描形式來配置 MyBatis 中映射器的類,可以通過配置包路徑來自動掃描包接口 生成映射器,這使得開發人員可以在編寫很少代碼的情況下,完成對映射器的配置,從而提高開發效率。
浙公網安備 33010602011771號