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

 

转载于:https://www.cnblogs.com/NoYone/p/8728919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值