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实例变量来访问容器本身。