zoukankan      html  css  js  c++  java
  • Spring基础总结一(生命周期,Aware接口,Resources)

    一、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
    * ②.BeanClassLoaderAware的setBeanClassLoader
    * ③.调用BeanFactoryAware的setBeanFactory方法,Bean中得到Bean所在的IOC容器,从而直接在Bean中使用IOC容器的服务
    * ④.调用ApplicationContextAware的setApplicationContext()方法
    * ⑤.执行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
  • 相关阅读:
    SQL SERVER代码生成器必备
    jquery实现ajax提交表单信息
    linux下的守护进程
    异步在单进程系统中的重要性
    php常用函数(持续更新)
    根据html容器大小和显示文字多少调节字体大小
    弹出框插件
    本地连接虚拟机上面的redis
    Flume学习——BasicTransactionSemantics
    Flume学习——BasicChannelSemantics
  • 原文地址:https://www.cnblogs.com/NoYone/p/8728919.html
Copyright © 2011-2022 走看看