Spring Bean的加載上下文與生命周期
l Spring自帶了多種類型的應用上下文,下面羅列幾個常用的:
l AnnotationConfigApplicationContext:從一個或多個基于Java的配置類中加載Spring應用上下文。
l AnnotationConfigWebApplicationContext:從一個或多個基于Java的配置類中加載Spring Web應用上下文。
l ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置文件中加載上下文定義,把應用上下文的定義文件作為類 資源。
l FileSystemXmlapplicationcontext:從文件系統(tǒng)下的一個或多個XML配置文件中加載上下文定義。
l XmlWebApplicationContext:從Web應用下的一個或多個XML配置文件中加載上下文定義。
FileSystemXmlapplicationcontext加載上下文:
ApplicationContext context=new FileSystemXmlapplicationcontext (“c:/xxx.xml”);
ClassPathXmlApplicationContext加載上下文:
ApplicationContext context=new ClassPathXmlApplicationContext (“xxx.xml”);
以上兩種加載方法的區(qū)別在于:FileSystemXmlapplicationcontext在指定的文件系統(tǒng)路徑下查找xml文件,而ClassPathXmlApplicationContext是在所有類路徑下(包含JAR文件)下查詢xml文件。
AnnotationConfigApplicationContext加載上下文:
ApplicationContext context=new AnnotationConfigApplicationContext (com.x.X.class);
在這里沒有通過XML獲取配置,而是通過一個配置類加載bean應用上下文準備就緒之后,我們就可以調(diào)用上下文的getBean()方法從Spring容器中獲取bean。
1.Spring對bean進行實例化;
2.Spring將值和bean的引用注入到bean對應的屬性中;
3.如果bean實現(xiàn)了BeanNameAware接口,Spring將bean的ID傳遞給setBean-Name()方法;
4.如果bean實現(xiàn)了BeanFactoryAware接口,Spring將調(diào)用setBeanFactory()方法,將BeanFactory容器實例傳入;
5.如果bean實現(xiàn)了ApplicationContextAware接口,Spring將調(diào)用setApplicationContext()方法,將bean所在的應用上下文的 引用傳入進來;
6.如果bean實現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的post-ProcessBeforeInitialization()方法;
7.如果bean實現(xiàn)了InitializingBean接口,Spring將調(diào)用它們的after-PropertiesSet()方法。類似地,如果bean使用initmethod聲明了初始化方法,該方法也會被調(diào)用;
8.如果bean實現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的post-ProcessAfterInitialization()方法;
9.此時,bean已經(jīng)準備就緒,可以被應用程序使用了,它們將一直駐留在應用上下文中,直到該應用上下文被銷毀;
10.如果bean實現(xiàn)了DisposableBean接口,Spring將調(diào)用它的destroy()接口方法。同樣,如果bean使用destroy-method聲明了銷 毀方法,該方法也會被調(diào)用。
想了解更多?現(xiàn)在就開始免費體驗