我的使用场景是SpringMvc+MyBatis,我总结了以下两种方式,三种方法。两种方式指的是采用注入方式和获取spring管理的bean。三种方法指的是,代理注入、硬编码获取bean和实现ApplicationContextAware接口获取bean。
第一种方式:采用注入方式。
编写一个代理类,代码如下:
@SuppressWarnings("serial") public class ProxyServlet extends HttpServlet { @Override public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { proxyServlet.service(req, res); } @Override public void init() throws ServletException { this.targetBean = getServletName(); getServletBean(); proxyServlet.init(getServletConfig()); } private String targetBean; private Servlet proxyServlet; private void getServletBean(){ WebApplicationContext wac = WebApplicationContextUtils .getRequiredWebApplicationContext(getServletContext()); this.proxyServlet = (Servlet) wac.getBean(targetBean); } }
然后编写需要注入service的servlet,代码如下:
@Component public class MemcacheServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Autowired private GlobalCacheService globalCacheService; /** * @see HttpServlet#HttpServlet() */ public MemcacheServlet() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String flag = request.getParameter("flag"); globalCacheService.test(); if("q".equals(flag)){ //取缓存 String name = (String)globalCacheService.getCacheValue("_name1", Object.class); System.out.println("执行取缓存操作: " + name); }else if("f".equals(flag)){ //放缓存 String username = request.getParameter("username"); globalCacheService.deleteCacheValue("_name1"); if(!StringUtil.isBlank(username)){ System.out.println("执行存缓存操作: " + username); globalCacheService.setCacheValue("_name1", username, 28800); }else{ System.out.println("执行存缓存操作: " + username); globalCacheService.setCacheValue("_name1", "lzx", 28800); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); this.doGet(request, response); } }
最后在web.xml中配置如下:
<servlet> <servlet-name>memcacheServlet</servlet-name> <servlet-class>com.hsis.core.servlet.web.ProxyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>memcacheServlet</servlet-name> <url-pattern>*.to</url-pattern> </servlet-mapping>
第二种方式:获取spring管理的service,采用硬编码或者实现AplicationContextAware接口。
2.1 采用硬编码方法如下:
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 或者 WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(servletContext); LzxService lzxService = (LzxService)wac.getBean("lzxService");
注:WebApplicationContext继承的ApplicationContext。
2.2 采用实现AplicationContextAware接口方法,首先创建一个类SpringContextUtil,代码如下:
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { applicationContext = applicationContext; } public static ApplicationContext getApplicationContext(){ return applicationContext; } public static Object getBean(String name){ return applicationContext.getBean(name); } public static <T> T getBean(String name, Class<T> requiredClass){ return applicationContext.getBean(name, requiredClass); } }
applicationContext.xml中配置一下:
<bean class=”SpringContextUtil” />
在servlet中使用即可:
globalCacheService = (GlobalCacheService) SpringContextUtil.getBean("globalCacheService", GlobalCacheService.class);
注:实现Aware接口的类,初始化之后可以获取对应的资源,实现ApplicationContextAware接口的bean,初始化后被注入applicationContext实例。
如果使用ClassPathXmlApplicationContext、FileSystemClassPathXmlApplicationContext和FileSystemXmlApplicationContext等对象去加载Spring配置文件,会生成一个新的application对象,这样会产生冗余。
相关推荐
【标题】"servlet+hibernate+spring实现添删改查"是一个常见的Web开发教程主题,它涵盖了Java后端开发中的三个核心框架:Servlet、Hibernate和Spring。这个主题主要针对初学者,旨在帮助他们理解如何整合这三个技术...
在这个名为“budi-kurniawan-servlet-jsp-springmvc-examples-4754f4ab5d5c”的压缩包中,可能包含了各种示例代码,涵盖了Servlet、JSP和Spring MVC的基本用法和组合应用。例如: 1. Servlet示例:展示了如何创建和...
【标题】: "Java Web开发中的JSP、Servlet、Struts、Hibernate和Spring技术详解" 【描述】: "本文深入探讨Java Web开发中常见的技术,包括JSP、Servlet、Struts、Hibernate和Spring,讲解它们的工作原理和实用技巧...
在Spring框架中,Servlet的管理是一项重要的任务,它涉及到Web应用的请求处理和业务逻辑的集成。`SimpleServletHandlerAdapter`是Spring MVC中一个关键组件,它为非Spring MVC注解驱动的Servlet提供了一种简单的方式...
在Java Web开发中,Servlet和Spring MVC(主要通过Controller)是两种常见的请求处理机制。本文将深入探讨原生Servlet与Spring Controller在性能方面的差异,并基于一个名为"AbTest"的Servlet项目源码进行分析。 ...
具体到我们的场景,如果DAO对象被Spring管理,而Servlet不在Spring容器中,那么我们就需要在Servlet初始化的时候从Spring容器中获取DAO对象。 具体操作步骤如下: 1. 在Servlet中定义一个私有成员变量作为DAO对象...
本资源是一个完整的通过Servlet-Service-Dao-JdbcTemplate访问MySQL数据库的JavaWeb Project,可以直接导入到Eclipse中进行调试运行,注意默认编译器是JDK1.8。
在这个名为"Servlet使用MVC模式(Dao\Service\Servlet)增删查改"的小程序中,我们将深入探讨如何利用这些组件来实现对MySQL数据库的操作。 **模型(Model)** 模型层是应用程序的核心,负责处理业务逻辑和数据访问...
这通常在Servlet中实现,通过检查当前登录用户的权限,只有管理员才能执行删除操作。 在`web5`这个压缩包文件中,可能包含了项目的所有源代码、配置文件、静态资源(如CSS、JavaScript和图片)等。开发者需要解压并...
在本项目中,Spring可能被用来管理Bean的生命周期,实现事务控制,并协调Struts和Hibernate的集成。理解Spring,你需要熟悉Bean的配置、Spring的AOP以及Spring MVC,它是Spring为Web应用提供的MVC实现。 Hibernate...
总之,这个主题涉及了Java中使用SFTP协议读取远程文件的技术,以及如何结合SpringProperties和Servlet来管理和访问这些配置。了解和掌握这些知识点,对于开发需要处理远程文件系统的Java应用是至关重要的。
本资源是一个完整的通过Servlet-Service-Dao-JdbcTemplate访问MySQL数据库的JavaWeb Project,可以直接导入到MyEclipse中进行调试运行,注意默认编译器是JDK1.6。
在本项目中,"servlet实现学生信息管理系统源码"是一个使用Java编程语言开发的Web应用程序,主要目标是实现对学生信息的高效管理。这个系统基于Servlet技术,它是一种用于构建动态Web应用的标准Java API,提供了...
在Java Web开发中,Spring框架和Servlet技术是两个核心组件,它们经常被用来构建高效、可扩展的Web应用程序。Spring框架提供了丰富的功能,包括依赖注入、面向切面编程、MVC(模型-视图-控制器)架构等,而Servlet则...
在本文中,我们将深入探讨如何使用JavaEE技术栈,特别是Spring、Spring MVC和MyBatis框架,来构建一个超市货物管理系统的实现。这个系统涵盖了基本的登录功能以及与MySQL数据库的交互,包括增删改查操作和分页显示。...
在人员信息管理系统的实现过程中,Spring负责业务逻辑的组织和控制,MyBatis处理与数据库的交互,而Servlet则作为两者之间的桥梁,接收前端请求并调用后端服务。例如,当用户提交新增人员信息的请求时,Servlet接收...
根据提供的部分代码示例,可以看出项目中使用了Spring框架进行初始化。Spring框架的初始化过程主要包括以下几个步骤: 1. **Servlet配置**:在`web.xml`文件中配置一个名为`ServiceDispatcher`的Servlet,该Servlet...
《Spring Web Service实战篇(1)》主要涵盖了在Java环境中使用Spring框架构建Web服务的相关技术。本实战篇将深入探讨Spring Web Service的核心概念、架构设计以及实现步骤,旨在帮助开发者熟练掌握这一强大的工具。 ...
《基于Servlet+Spring+Mybatis的客户关系管理系统》 在当今的企业运营中,客户关系管理(Customer Relationship Management,简称CRM)系统是至关重要的工具,它帮助企业有效地管理与客户的交互,提高销售效率,...