基于Spring上下文工具类 ApplicationContextUtil
spring上下文工具类 applicationcontextutil
import org.springframework.beans.beansexception; import org.springframework.context.applicationcontext; import org.springframework.context.applicationcontextaware; import org.springframework.stereotype.component; /** * spring 上下文工具类 * @author dawn */ @component public class applicationcontextutil implements applicationcontextaware { /** * 上下文对象实例 */ private static applicationcontext applicationcontext; @override public void setapplicationcontext(applicationcontext applicationcontext) throws beansexception { applicationcontextutil.applicationcontext = applicationcontext; } /** * 获取applicationcontext * * @return */ public static applicationcontext getapplicationcontext() { return applicationcontext; } /** * 通过name获取 bean. * * @param name * @return */ public static object getbean(string name) { return getapplicationcontext().getbean(name); } /** * 通过class获取bean. * * @param clazz * @param <t> * @return */ public static <t> t getbean(class<t> clazz) { return getapplicationcontext().getbean(clazz); } /** * 通过name,以及clazz返回指定的bean * * @param name * @param clazz * @param <t> * @return */ public static <t> t getbean(string name, class<t> clazz) { return getapplicationcontext().getbean(name, clazz); } }
获取applicationcontext的工具类
在项目中,经常遇到这样的问题:
有些类需要使用new来创建对象,但是类中需要使用spring容器中定义的bean,此时无法通过spring的自动注入来注入我们需要使用的bean。
所以需要手动的从spring容器中获取bean。要获取bean必须先获取到applicationcontext对象,有以下方式可以获取该对象。
方式一
手动创建applicationcontext对象,并保存起来。
public class applicationcontextutil { private static applicationcontext context; static { context = new classpathxmlapplicationcontext("applicationcontext.xml"); } public static applicationcontext getapplicationcontext() { return context; } }
方式二
在web环境中通过spring提供的工具类获取,需要servletcontext对象作为参数。然后才通过applicationcontext对象获取bean。
下面两个工具方式的区别是,前者在获取失败时返回null,后者抛出异常。
另外,由于spring是容器的对象放在servletcontext中的,所以可以直接在servletcontext取出 webapplicationcontext 对象。
applicationcontext context1 = webapplicationcontextutils.getwebapplicationcontext(servletcontext sc); applicationcontext context2 = webapplicationcontextutils.getrequiredwebapplicationcontext(servletcontext sc); webapplicationcontext webapplicationcontext = (webapplicationcontext) servletcontext.getattribute(webapplicationcontext.root_web_application_context_attribute);
方式三
工具类继承抽象类applicationobjectsupport,并在工具类上使用@component交由spring管理。
这样spring容器在启动的时候,会通过父类 applicationobjectsupport中的setapplicationcontext()方法将applicationcontext对象设置进去。
可以通过getapplicationcontext()得到applicationcontext对象。
方式四
工具类继承抽象类webapplicationobjectsupport,查看源码可知webapplicationobjectsupport是继承了applicationobjectsupport,所以获取applicationcontext对象的方式和上面一样,也是使用getapplicationcontext()方法。
方式五
工具类实现applicationcontextaware接口,并重写setapplicationcontext(applicationcontext applicationcontext)方法,在工具类中使用@component注解让spring进行管理。
spring容器在启动的时候,会调用setapplicationcontext()方法将applicationcontext 对象设置进去。
@component public class applicationcontextutil implements applicationcontextaware { private static applicationcontext context; public void setapplicationcontext(applicationcontext applicationcontext) throws beansexception { context = applicationcontext; } public static applicationcontext getapplicationcontext() { return context; } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
基于StringUtils工具类的常用方法介绍(必看篇)
-
基于C#实现XML文件读取工具类
-
基于python的ini配置文件操作工具类
-
基于Spring注解的上下文初始化过程源码解析(一)
-
Spring boot工具类静态属性注入及多环境配置详解
-
手写spring时的一些工具类
-
C#编写了一个基于Lucene.Net的搜索引擎查询通用工具类:SearchEngineUtil
-
C#工具类OracleHelper,基于Oracle.ManagedDataAccess.Client封装
-
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
-
基于StringUtils工具类的常用方法介绍(必看篇)