在某些特殊的情况下,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实例变量来访问容器本身。
如对本文有疑问, 点击进行留言回复!!
第三次学JAVA再学不好就吃翔(part88)--ArrayList嵌套ArrayList
使用ffmpeg视频切片并加密和视频AES-128加密后播放
JAVA程序设计:最长重复子串(LeetCode:1044)
LiveGBS国标GB/T28181云端录像分布式录像存储自动清理时移回看录像下载播放
网友评论