您的位置:首页 > 编程语言 > Java开发

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

2011-04-13 13:59 841 查看
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐