欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ApplicationContextAware接口

程序员文章站 2022-03-27 12:09:26
在某些特殊的情况下,Bean需要实现某个功能,但该功能必须借助于Spring容器才能实现,此时就必须让该Bean先获取Spring容器,然后借助于Spring容器实现该功能。为了让Bean获取它所在的Spring容器,可以让该Bean实现ApplicationContextAware接口。 下面示例 ......

在某些特殊的情况下,bean需要实现某个功能,但该功能必须借助于spring容器才能实现,此时就必须让该bean先获取spring容器,然后借助于spring容器实现该功能。为了让bean获取它所在的spring容器,可以让该bean实现applicationcontextaware接口。

下面示例为实现applicationcontextaware的工具类,可以通过其它类引用它以操作spring容器及其中的bean实例。

@component
public class springhelper implements applicationcontextaware {

    private static applicationcontext applicationcontext = null;
    // 非@import显式注入,@component是必须的,且该类必须与main同包或子包
    // 若非同包或子包,则需手动import 注入,有没有@component都一样

    @override
    public void setapplicationcontext(applicationcontext applicationcontext) throws beansexception {
        if(this.applicationcontext == null){
            this.applicationcontext  = applicationcontext;
        }
    }

    //获取applicationcontext
    public static applicationcontext getapplicationcontext() {
        return applicationcontext;
    }

    //通过name获取 bean.
    public static object getbean(string name){
        return getapplicationcontext().getbean(name);

    }

    //通过class获取bean.
    public static <t> t getbean(class<t> clazz){
        return getapplicationcontext().getbean(clazz);
    }

    //通过name,以及clazz返回指定的bean
    public static <t> t getbean(string name,class<t> clazz){
        return getapplicationcontext().getbean(name, clazz);
    }

}

spring容器会检测容器中的所有bean,如果发现某个bean实现了applicationcontextaware接口,spring容器会在创建该bean之后,自动调用该bean的setapplicationcontextaware()方法,调用该方法时,会将容器本身作为参数传给该方法——该方法中的实现部分将spring传入的参数(容器本身)赋给该类对象的applicationcontext实例变量,因此接下来可以通过该applicationcontext实例变量来访问容器本身。