在开发的过程中,难免会碰到需要在工具类中使用由spring管理的对象的情况,但是我们都知道,工具类中的静态方法中无法引用spirng容器中的对象(被spring管理的对象不是静态的,静态方法中无法调用),那么该如何才能在静态方法中调用到该对象呢?
首先需要介绍spring的一个接口类:
ApplicationContextAware
Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContextAware()方法,调用该方法时,会将容器本身作为参数传给该方法——该方法中的实现部分将Spring传入的参数(容器本身)赋给该类对象的applicationContext实例变量,因此接下来可以通过该applicationContext实例变量来访问容器本身。
由此可见,通过实现ApplicationContextAware接口,我们可以获取到spring的ApplicationContext上下文对象,而该对象管理容器中的Bean,这样我们就可以通过该对象去获取到容器中自己想要的Bean了,如下:
我们可以在工具类中的静态方法调用ApplicationContextUtil.get()方法,来获取想要的spring容器中对象。
调用接口返回:
以上通过ApplicationContextUtil.get()在静态方法中获取到了spring容器中的TestService对象,并调用了该对象getName()方法