当前位置: 移动技术网 > IT编程>开发语言>Java > ApplicationContextAware接口

ApplicationContextAware接口

2018年10月23日  | 移动技术网IT编程  | 我要评论

在某些特殊的情况下,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实例变量来访问容器本身。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网