码迷,mamicode.com
首页 > 编程语言 > 详细

Spring基础总结一

时间:2018-04-06 22:31:37      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:class   sage   发布   info   tor   throws   context   定义   ash   

一、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基础总结一

标签:class   sage   发布   info   tor   throws   context   定义   ash   

原文地址:https://www.cnblogs.com/NoYone/p/8728919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!