如何使用spring将service层注入到servlet中去(how to use Spring to inject ur service layer into the servlet )

In a typical struts+spring framework, we know how to inject our “service”
into the “action”. But sometime we have to use the “servlet”.

I mean the real servlet, not the struts’s action-servlet!

For example:

We have a servlet name is “UserServlet”, we want to inject the service
“MyTaskService” into it as following sample shows:

public class userServlet extends HttpServlet {

@Resource
MyTaskService myTaskService;
}

We will have two method:

Method 1:

we can directly override the servlet’s “init” method as following sample:

public void init(ServletConfig servletConfig) throws ServletException
{
ServletContext servletContext =
servletConfig.getServletContext();
WebApplicationContext
webApplicationContext =
WebApplicationContextUtils.
getWebApplicationContext(servletContext);
AutowireCapableBeanFactory
autowireCapableBeanFactory
=
webApplicationContext.getAutowireCapableBeanFactory();
autowireCapableBeanFactory.configureBean(this,
BEAN_NAME);
}

The “BEAN_NAME” is the name which we want to inject thru the Spring, e.g.
“MyTaskService”.

But this is not a graceful method.

Method 2:

We write a Delegate Bean, like the
“org.springframework.web.struts.DelegatingRequestProcessor”

, then we
can thru configurable method to inject our service into the servlet, here is our
Delegate Bean:

public class DelegatingServletProxy extends GenericServlet {
private
String targetBean;
private Servlet proxy;

@Override
public void service(ServletRequest req, ServletResponse
res)
throws ServletException, IOException {
proxy.service(req, res);

}

public void init() throws ServletException {
this.targetBean =
getServletName();
getServletBean();
proxy.init(getServletConfig());
}

private void getServletBean() {
WebApplicationContext wac =
WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext());
this.proxy
= (Servlet) wac.getBean(targetBean);
}
}

With this DelegatingServletProxy, we should make a little change of the “”
cofig in our “web.xml”.

Normally, we config our “servlet” like this:

userServlet
com.sample.UserServlet

Now, we config our “servlet” in this way:

userServlet
com.sample.DelegatingServletProxy

No changes for “”, only for “”.

And the last thing is:

Pls don’t forget to add the “@Component” into the “servlet” to tell ur Spring
container that this servlet will be regarded as a “spring-bean”. Here is a
sample:

@Component
public class UserServlet extends HttpServlet {
private
static final long serialVersionUID = 1L;
@Resource
MyTaskService
myTaskService;
}

Ok, done, now we can enjoy the “IoC” into our servlet.

时间: 2024-11-23 08:09:35

如何使用spring将service层注入到servlet中去(how to use Spring to inject ur service layer into the servlet )的相关文章

在使用spring的过程中,service层写在配置文件中好呢还是注解配置好呢?

问题描述 在使用spring的过程中,service层写在配置文件中好呢还是注解配置好呢? 在使用spring的过程中,service层写在配置文件中好呢还是注解配置好呢?在配置文件中是这样的注解配置时这样的@Service(""userService"")说说理由哦. 解决方案 一般应用性开发使用注解就可以.它较xml配置方式的优势在于省去了xml复杂的配置,而且不需要维护两套内容(xml配置方式需要维护service类和xml文件).但是如果需要修改相关内容,注

别装了,难道你们不想把properties直接注入到object中去(spring-plugin)?

[size=small]/** *作者:张荣华(ahuaxuan) *日期:2008-4-9 **/ 1背景 Spring2.5支持使用annotation来配置我们的service,比如如下代码: @Service("userService") public class UserServiceImpl extends BaseServiceSupport implements UserService { public void xxx() { } } 这样就表示这个service需要

service层如何做到在属性上加@resource后,不写set和构造也可以直接注入

问题描述 service层如何做到在属性上加@resource后,不写set和构造也可以直接注入 不是说注入必须要写set或者构造方法吗,可是我在程序service层注入service,和dao的bean直接就可以注入,但是注入controller就不可以,这是为什么 解决方案 可以的,controller层可以注入service.但是像实体的话不可以注入,必须有get,set方法

Spring开发 - 通过实现ApplicationContextAware在Servlet中调用注解的Service

用过Spring MVC的人都知道,我们如何在Controller中注入Service,可以使用@Resource注解的方法. 有时候,实际在项目的过程中,我们需要在某个Servlet中使用Service, 但是由于Spring MVC中的Servlet都是由 DispatcherServlet统一管理的,因此,像Controller方式的注解方式注入在普通的Servlet中是行不通的. 本文介绍通过实现ApplicationContextAware的方法在你自己的Servlet中也可以很轻松地

Spring batch将数据写入到webservice中

问题描述 Spring batch将数据写入到webservice中 我现在需要用Spring Batch将数据写入到webservice中,但是spring官方只是提供了jdbcxml等方法,请问各位牛人有没有好的解决方案. 解决方案 http://www.yihaomen.com/article/java/433.htm

spring定时器,怎么注入dao层?

问题描述 spring定时器,怎么注入dao层? 用的spring3.0 注解配置的定时器,基本功能(定时访问)能实现,现在想定时访问数据库,该怎么注入dao层呢?? 解决方案 百度半天,实在找不到相关的内容,才来求教... 解决方案二: 定时访问和定时访问数据库这两个有什么区别吗?没看懂 解决方案三: 自己顶...自己顶...自己顶...自己顶 解决方案四: 再定再定再定再定再定再定再定再定再定再定再定再定再定再定再定再定再定再定再定 解决方案五: 求大大求告知................

spring学习笔记(21)编程式事务配置,service层概念引入

访问数据库事务导入 在我之前的文章<spring学习笔记(19)mysql读写分离后端AOP控制实例>中模拟数据库读写分离的例子,在访问数据库时使用的方法是: public <E> E add(Object object) { return (E) getSessionFactory().openSession().save(object); } 通过直接开启session而后保存对象.查询数据等操作,是没有事务的.而如果我们的项目规模变大,业务逻辑日益复杂,我们在一个方法中进行大

spring声明式事务,service层必须在ioc容器中声明?

问题描述 各位,小弟在学习spring+hibernate 声明式事务时,发现一个问题, 做了两种测试1. 建立一个普通的 java projectx.y.services 包下有 applicationContext.xml, DefaultFooService.java, 在applicationContext.xml中对DefaultFooService进行声明式事务,并注入 DefaultFooService运行后成功实现事务管理2. 建立一个 web dynamic project在a

spring事务回滚只能配在service层吗。为什么我想在Test中添加事务不能进行回滚呢

问题描述 spring事务回滚只能配在service层吗.为什么我想在Test中添加事务不能进行回滚呢 <tx:advice id="txAdvice2" transaction-manager="txManager"> <tx:attributes> <tx:method name="inserttwo*" propagation="REQUIRED"/> </tx:attribut