zoukankan      html  css  js  c++  java
  • spring常用的几个aware bean接口

    BeanNameAware

    作用:让Bean获取自己在BeanFactory配置中的名字(根据情况是id或者name)。
    Spring自动调用。并且会在Spring自身完成Bean配置之后,且在调用任何Bean生命周期回调(初始化或者销毁)方法之前就调用这个方法。换言之,在程序中使用BeanFactory.getBean(String beanName)之前,Bean的名字就已经设定好了。

    BeanFactoryAware

    要直接在自己的代码中读取spring的bean,我们除了根据常用的set外,也可以通过spring的BeanFactoryAware接口实现,只要实现setBeanFactory方法就可以。

    private BeanFactory  beanFactory;
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
    this.beanFactory = beanFactory;
    }

    这样我们就可以直接拿东西用了,如
    Object  object = beanFactory.getBean(beanName);

    我们既然可以通过set来拿到我们要的对象,为什么还要用这个beanFactory呢,道理很简单,因为有些情况是需要动态的去获取对象的,比如说我有10个银行的处理对象,他们都继承了我的BankService对象,但是具体处理的时候要哪家银行的对象呢?这个依赖于用户的选择。你可以注入10个BankService实例,然后用if --else来搞,不过那样太坨了。每增加一家银行你都需要改代码。

    通过beanFactory的话,那就一行代码搞定,只要给beanName就OK了,动点脑筋吧beanName配置的有规律点,然后根据用户的银行选择,凑出个beanName,大功告成了!
    简单一句话的理解是:beanFactory让你可以不依赖注入方式,随意的读取IOC容器里面的对象,不过beanFactory本身还是要注入的

    ApplicationContextAware

    当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象
    public class LocalUtil implements ApplicationContextAware{
      private static ApplicationContext applicationcontext;
      @Override
      public void setApplicationContext(ApplicationContext applicationcontext)throws BeansException {
    this.applicationcontext = applicationcontext;
      }
      public static ApplicationContext getApplicationContext()throws BeansException {
    return applicationcontext;
      }
    }

    ResourceLoaderAware

    ResourceLoaderAware回调接口负责将ResourceLoader对象注入到当前的受管Bean实例中,其定义如下。当受管Bean获得ResourceLoader对象后,它便能够通过它获得各种资源。
    public interface ResourceLoaderAware {
        void setResourceLoader(ResourceLoader resourceLoader); 

    ServletContextAware
    在spring中,凡是实现ServletContextAware接口的类,都可以取得ServletContext。

    BeanClassLoaderAware
     允许一个获取它的classLoader(即当前bean factory加载bean类使用的class loader)的回调类,实现了void setBeanClassLoader(ClassLoader classLoader);

    InitializingBean

    接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。

    --------------------- 本文来自 HelloWorld搬运工 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/wufaliang003/article/details/75208647?utm_source=copy 

    --------------------- 本文来自 wanhf11 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_17612199/article/details/53115706?utm_source=copy 

  • 相关阅读:
    python 中的深拷贝和浅拷贝
    时间复杂度
    为什么l1和l2可以防止过拟合
    逻辑回归实现多分类
    《深入浅出数据分析》读书笔记
    牛客网的输入和输出
    万物皆可embedding
    NLP中的mask的作用
    不同语言对单例模式的不同实现
    ElasticSearch 索引 VS MySQL 索引
  • 原文地址:https://www.cnblogs.com/tzhyy/p/9719236.html
Copyright © 2011-2022 走看看