Spring基础总结一

Posted noyone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring基础总结一相关的知识,希望对你有一定的参考价值。

一、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基础总结一的主要内容,如果未能解决你的问题,请参考以下文章

miniui后台无法接收到input传值

Java 基础学习总结(200)—— GraalVM 为什么能被称为下一代虚拟机

Java 基础学习总结(200)—— GraalVM 为什么能被称为下一代虚拟机

Spring 学习总结(35)—— Spring 6.0 新特性总结

Spring 学习总结(35)—— Spring 6.0 新特性总结

Java基础总结一(概述基础知识)