spring框架詳解

把以前分享的spring框架整理一份放在這裏。html

總體架構:java

Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架web

框架圖(選自:http://docs.spring.io/spring/docs/3.0.x/reference/overview.html):spring

 

core Container爲spring的核心,實現了基於IoC的bean管理容器。上層的aop /Aspects都是基於他基礎上實現的AOP。他們構成了spring的核心功能。編程

在IoC和AOP基礎上,咱們有擴展了數據層和web層架構

 

使用場景:mvc

web應用使用場景:(springmvc + spring)app

 

rpc應用使用場景:框架

 

IoC:ui

 應用控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用,傳遞給它。也能夠說,依賴被注入到對象中。因此,控制反轉是,關於一個對象如何獲取他所依賴的對象的引用,這個責任的反轉。

 

IoC容器框架的類關係:

 

 

beanFactory 和 applicationContext的比較,applicationContext支持的功能更多:

applicationContext支持不一樣的信息源:ApplicationContext擴展了MessageSource接口,能夠支持國際化的實現。

訪問資源:ApplicationContext繼承了DefaultResourceLoader的子類,提供ResourceLoader和Resource的支持

支持應用事件:ApplicationContext繼承了ApplicationEventPublisher接口

 

applicationContext啓動流程(AbstractApplicationContext):

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory);

// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);

// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);

  

bean介紹:

按照注入bean的種類分類:

分爲 普通bean和 FactoryBean

factoryBean 須要實現FactoryBean接口,應用於一個bean做爲工廠方法產生不一樣的bean實例,經常使用於應用層框架的搭建,能夠根據特定條件返回接口的不一樣實現

 

public interface FactoryBean<T> {

    T getObject() throws Exception;
        Class<?> getObjectType();
    boolean isSingleton();

}

 

bean的資源定義如何載入到容器:

xmlBeanFactory:

 

    public XmlBeanFactory(Resource resource, BeanFactory parentBeanFactory) throws BeansException {
        super(parentBeanFactory);
        this.reader.loadBeanDefinitions(resource);
    }

 

applicationContext

 

編程式獲取bean的方法

ApplicationContext context = new ClassPathXmlApplicationContext("JunitNoHsfApplicationContext.xml");
        FuwuDao fuwuDao = (FuwuDao)context.getBean("fuwuDao");

 

 

Web應用程序bean實例化的配置

 

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:application.xml</param-value>
    </context-param>

    <context-param>
        <param-name>${contextClassKey}</param-name>
        <param-value>com.taobao.data.fmp.spring.FmpApplicationContext</param-value>
    </context-param>


    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

 

bean的註冊流程:

 

如何自定義bean標籤

http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/extensible-xml.html#extensible-xml-parser

 

獲取bean的流程:

 

bean的生命週期

 

 

生命週期中的擴展

  • 各種Aware接口
  • BeanPostProcessor接口
  • InitializingBean接口

 

spring在web中如何啓動

 

bean的註解

@Autowired或@Resource

@Component(不推薦使用)、@Repository、@Service、@Controller 

 

註解功能的實現原理

  • 註解標籤的解析

<context:component-scan base-package="com.taobao.data.fmp" />

http\://www.springframework.org/schema/context=org.springframework.context.config.ContextNamespaceHandler

  • 實現註解功能用到的beanPostProcessor

 AutowiredAnnotationBeanPostProcessor   CommondAnnotationBeanPostProcessor

PersistenceAnnotationBeanPostProcessor   RequiredAnnotationBeanPostProcessor

 

問題互動:

Bean 的循環依賴會報錯嗎

如何擴展一個bean的定義標籤

Web applicationContext何時實例化 bean

 

AOP

面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。

 

 

實現原理

 

webx介紹

 

http://www.openwebx.org/

webx是在spring基礎上對標籤解析這進行了更一步的擴張,是標籤解析和bean載入模式更加靈活

相關文章
相關標籤/搜索