博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring开发 - 通过实现ApplicationContextAware在Servlet中调用注解的Service
阅读量:7219 次
发布时间:2019-06-29

本文共 3160 字,大约阅读时间需要 10 分钟。

用过Spring MVC的人都知道,我们如何在Controller中注入Service,可以使用@Resource注解的方法。

有时候,实际在项目的过程中,我们需要在某个Servlet中使用Service, 但是由于Spring MVC中的Servlet都是由

DispatcherServlet统一管理的,因此,像Controller方式的注解方式注入在普通的Servlet中是行不通的。

本文介绍通过实现ApplicationContextAware的方法在你自己的Servlet中也可以很轻松地使用你的Service。

首先,你需要实现你的Spring上下文工具类,代码如下:

package com.tg.util.web;import org.springframework.beans.BeansException;import org.springframework.beans.factory.NoSuchBeanDefinitionException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;public class SpringContextUtil implements ApplicationContextAware {    private static ApplicationContext applicationContext;    /**     * 实现ApplicationContextAware接口的回调方法,设置上下文环境     * @param applicationContext     * @throws BeansException     */    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {        SpringContextUtil.applicationContext = applicationContext;    }    /**     * @return ApplicationContext     */    public static ApplicationContext getApplicationContext() {        return applicationContext;    }    /**     * 获取对象     * @param name     * @return Object 一个以所给名字注册的bean的实例     * @throws BeansException     */    public static Object getBean(String name) throws BeansException {        return applicationContext.getBean(name);    }    /**     * 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)     * @param name       bean注册名     * @param requiredType 返回对象类型     * @return Object 返回requiredType类型对象     * @throws BeansException     */    public static Object getBean(String name, Class requiredType) throws BeansException {        return applicationContext.getBean(name, requiredType);    }    /**     * 如果BeanFactory包含所给名称匹配的bean返回true     * @param name     * @return boolean     */    public static boolean containsBean(String name) {        return applicationContext.containsBean(name);    }    /**     * 判断注册的bean是singleton还是prototype。     * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)     * @param name     * @return boolean     * @throws NoSuchBeanDefinitionException     */    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {        return applicationContext.isSingleton(name);    }    /**     * @param name     * @return Class 注册对象的类型     * @throws NoSuchBeanDefinitionException     */    public static Class getType(String name) throws NoSuchBeanDefinitionException {        return applicationContext.getType(name);    }    /**     * @param name     * @return     * @throws NoSuchBeanDefinitionException     */    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {        return applicationContext.getAliases(name);    }}

 

第二步非常重要,你需要在你的Spring配置文件中加入你的工具类Bean的单例配置,代码如下:

 

 

最后一步就是使用了,代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {    ...    GameInfoService service = (GameInfoService) SpringContextUtil.getBean("gameInfoService");    List
games = service.getAll(); ...}

 

好了,一切大功告成!

 

转载于:https://www.cnblogs.com/davidgu/p/6073422.html

你可能感兴趣的文章
Java中的clone
查看>>
Lucene基础(2)
查看>>
Oracle 存储过程
查看>>
java基础 静态 static 问在多态中,子类静态方法覆盖父类静态方法时,父类引用调用的是哪个方法?...
查看>>
FlasCC发布说明
查看>>
如何在macOS Sierra中运行CORE Keygen破解程序
查看>>
终极解决方案:windows10资源管理器假死
查看>>
【java】一维数组循环位移方阵
查看>>
Essential Studio for mobile MVC中创建Razor应用程序平台教程
查看>>
java主函数的含义
查看>>
中国大学MOOC —— 学习笔记(四)
查看>>
访问,ringbtn,
查看>>
致橡树
查看>>
一段测试代码,哦哦哦,
查看>>
uiimagepickercontroller,中文,--》摘
查看>>
第四次作业
查看>>
在python中调用js或者nodejs
查看>>
【年终总结】2年计划还是要有的,万一实现了呢?(转自叶小钗)
查看>>
数字图像处理学习笔记(1.1)---位图的读写、几何变换、傅里叶变换、直方图均衡...
查看>>
javascript数组顺序-----1冒泡的另一种比较好理解的写法
查看>>