java常見面試題錦集(spring)


說你下你對Spring IOC的了解

Spring IOC(inversion of control)負責控制對象的生命周期和對象間的關系。

DI(Dependency Injetion)依賴注入:動態的向對象注入它所需要的對象。

好處:降低對象之間的耦合度,是程序更加穩定。

 

簡單介紹下Spring AOP

Spring AOP面向切面編程,在面向對象(oop)編程思想中,我們將事務抽象成一個個的對象,而在面向切面編程中,我們將一個個對象某些類似的方面橫向抽成一個切面,對這個切面進行一些如權限控制,事務管理,記錄日志等公用操作處理的過程就是面向切面的思想,AOP底層是動態代理,如果是接口采用的是JDK動態代理,如果是類采用CGLIB方式實現動態代理。

 

spring如何開啟注解注入屬性

spring在2.5版本之后開始支持注解的方式依賴注入,可以用注解的方式替代xml的bean的描述,注解注入將會被容器在xml中bean注入之前處理。所以xml會覆蓋掉注解的對同一屬性的處理結果。

注解裝配在spring中是默認關閉的,所以需要在spring核心配置文件中手動開啟,配置如下:

  <context:annotation-config/>

 

@Autowried和@Resource的區別

兩者都是用來裝配bean的, 可作用於字段上, 也可以作用於setter方法上。

  @Autowried:spring的注解,默認情況下要求對象必須存在, 它要求依賴對象必須存在. 若允許null值, 可以設置它的required為false.

默認按照類型進行裝配注入. 如果想按照名稱進行裝配的話, 需要與Qualifer注解搭配使用.

@Autowried
@Qualifier("admin")
private AdminDAO adminDAO;

  @Resource:j2ee的注解,默認按照名稱來裝配注入, 只有找不到與名稱匹配的bean才會按照類型來注入。

 

Spring bean的生命周期

Spring對bean進行實例化,默認bean是單例;

Spring對bean進行依賴注入;

如果bean實現了BeanNameAware接口,spring將bean的id傳給setBeanName()方法;

如果bean實現了BeanFactoryAware接口,spring將調用setBeanFactory方法,將BeanFactory實例傳進來;

如果bean實現了ApplicationContextAware接口,它的setApplicationContext()方法將被調用,將應用上下文的引用傳入到bean中;

如果bean實現了BeanPostProcessor接口,它的postProcessBeforeInitialization方法將被調用;

如果bean實現了InitializingBean接口,spring將調用它的afterPropertiesSet接口方法,類似的如果bean使用了init-method屬性聲明了初始化方法,該方法也會被調用;

如果bean實現了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法將被調用;

此時bean已經准備就緒,可以被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用上下文被銷毀;

若bean實現了DisposableBean接口,spring將調用它的distroy()接口方法。同樣的,如果bean使用了destroy-method屬性聲明了銷毀方法,則該方法被調用;


Spring bean的作用域之間有什么區別

Spring容器中的bean可以分為5個范圍。

singleton:不管接收多少請求,每個容器只有一個bena實例(默認單例)。

prototype:每次調用創建一個實例。

request:每一個請求創建一個實例(只應用於web)。

Session:每一個用戶session創建一個實例。

global-sessioon:global-session和Portlet應用相關。當你的應用部署在Portlet容器中工作時,它包含很多portlet。如果你想要聲明讓所有的portlet共用全局的存儲變量的話,那么這全局變量需要存儲在global-session中。

全局作用域與Servlet中的session作用域效果相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM