spring框架有兩個重要的功能是IOC和AOP
IOC(依賴注入):將對象的創建和依賴關系交給容器進行管理,簡化了開發過程。
AOP(面向切面):spring通過預編譯方式和運行期動態代理的方式在不修改源代碼的情況下,給程序添加功能的一種思想。
springIOC工作原理:
springIOC最重要的單個包是beans,context,core包
其中最重要的兩個接口是:BeanFactory和BeanDefinition
BeanFacoty:是springIOC核心工廠接口,根據對象的依賴關系進行創建對象。ApplicationContext就是其中的一個具體實現。
要定義一個工廠必須滿足三個條件
①需要持有各種bean的定義
②需要持有bean之間的依賴關系
③需要讀取xml配置文件的工具
BeanDefinition:是spring中bean的定義接口,該接口繼承了兩個接口,AttributeAccessor和BeanMetadataElement。AttributeAccessor是core包下的,使bean定義的接口具有處理屬性的能力。BeanMetadataElement是bean包下的,它可以獲得bean的配置定義的一個元素。在xml文件下,就是會持有bean的一個標簽。
BeanFactory持有bean的定義是通過Map集合實現的(BeanName是key),Map集合是Map<String,BeanDefinition>而非Map<String,Object>,是因為bean的初始化是可控的,可以在啟動容器時創建實例,也可以在使用才創建實例。通過lazy-init屬性來實現 (默認為false)
bean的初始化過程就是往Map集合里面注入內容。
其過程分為三部分:定位(xml文件的位置)、解析、注冊(將BeanName和對應的BeanDefinition添加到Map中去)
解析過程:先通過Reader讀取xml文件,然后通過documentLoader將資源轉化為Document,最后通過SAX解析器解析Document文件。
SpringAOP工作原理:
其中重要的接口有:
Advice:是一個超級接口,擴展了很多的子接口,如AfterAdvice和BeforeAdvice。作用是給目標對象添加的方法
PointCut:決定需要切入的方法
Advisor:通知者。Advisor依賴於Advice,而Advisor的子接口,PointAdvisor還依賴於PointCut.。作用:該接口確切的包含了要通知誰和要通知什么。
FactoryBean:該接口是產生Bean的特殊Bean
FactoryBean的實現類ProxyFactoryBean:產生Proxy的Bean,也就是產生一個加強的Bean
該對象最重要的兩個屬性是:interpretorNames和targetName,interpretorNames該屬性是確定需要加強哪些東西以及怎么加強。targetName該屬性是目標對象。