Spring基礎總結一
阿新 • • 發佈:2018-04-07
des con ans bsp process ebean 修改 b- efault 二、Spring的各種Aware接口,實現對IOC容器的感知
一、Spring生命周期
* 容器級別生命周期接口方法
* ①.實例化BeanFactoryPostProcessor實現類
::若實現該接口,在Spring容器加載bean的定義文件之後,實例化bean之前,可以修改bean的定義屬性。
* ②.執行BeanFactoryPostProcessor的postProcessBeanFactory方法
* ③.實例化BeanPostProcessor實現類(後處理器)
::在Bean的註入過程中會用到,在實例化bean之後,可以在bean的初始化方法前後添加一些自己的處理邏輯。
兩個方法:①postProcessBeforeInitialization會在所以bean的init-method和InitializingBean的afterPropertiesSet方法之前執行。
②postProcessAfterInitialization在上述方法之後執行。
後面的Bean註入過程有展示
* ④.實例化InstantiationAwareBeanPostProcessorAdapter實現類(後處理器)
* ⑤.執行InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法
* 執行Bean的構造器
* ①.執行InstantiationAwareBeanPostProcessor的postProcessPropertyValues
* Bean註入過程
* ①.調用BeanNameAware的setBeanName設置Bean的name
* ②.調用BeanFactoryAware的setBeanFactory方法,Bean中得到Bean所在的IOC容器,從而直接在Bean中使用IOC容器的服務
* ③.執行BeanPostProcessor的postProcessBeforeInitialization方法
* ④.調用InitializingBean的afterPropertiesSet方法
* ⑤.調用配置文件中的default-init-method或者init-method
* ⑥.執行BeanPostProcessor的postProcessAfterInitialization方法
* 銷毀過程
* ①.調用DisposableBean的destroy方法
* ②.調用配置文件中的destroy-method或default-destroy-method屬性指定的初始化方法
二、Spring的各種Aware接口,實現對IOC容器的感知
BeanNameAware,可以在Bean中得到它在IOC容器中的Bean的實例的名字。
BeanFactoryAware,可以在Bean中得到Bean所在的IOC容器,從而直接在Bean中使用IOC容器的服務。
ApplicationContextAware,可以在Bean中得到Bean所在的應用上下文,從而直接在Bean中使用上下文的服務。
MessageSourceAware,在Bean中可以得到消息源。
ApplicationEventPublisherAware,在bean中可以得到應用上下文的事件發布器,從而可以在Bean中發布應用上下文的事件。
ResourceLoaderAware,在Bean中可以得到ResourceLoader,從而在bean中使用ResourceLoader加載外部對應的Resource資源。
代碼示例:
public class TestBeanName implements BeanNameAware, ApplicationContextAware { private String beanName; //通過BeanNameAware得到Bean的name @Override public void setBeanName(String name) { this.beanName = name; System.out.println("BeanName : " + name); } //通過ApplicationContextAware得到Bean的上下文信息 @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("setApplicationContext : " + applicationContext.getBean(this.beanName).hashCode()); } }View Code
三、Spring getResource
可以用ApplicationContextAware中的ApplicationContext或者或ResourceLoaderAware中的ResourceLoader。
代碼示例:
//兩個接口都可以,選其一 public class TestResource implements ApplicationContextAware,ResourceLoaderAware { private ApplicationContext applicationContext; private ResourceLoader resourceLoader; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Override public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } public void resource() throws IOException { // Resource resource = applicationContext.getResource("classpath:config.txt"); // Resource resource = applicationContext.getResource("config.txt"); // Resource resource = applicationContext.getResource("file:E:\\JAVA\\Spring\\545040d70001107900000000\\Spring\\src\\main\\resources\\config.txt"); Resource resource = applicationContext.getResource("url:https://avatar.csdn.net/1/0/E/3_u013076044.jpg"); System.out.println(resource.getFilename()); System.out.println(resource.contentLength()); } }View Code
Spring基礎總結一