說你下你對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作用域效果相同。