关闭

Java Servlets 注入spring bean

标签: Java Servlets 注入spriServlets 注入bean
516人阅读 评论(0) 收藏 举报
分类:

Java Servlets 注入spring bean


方法一:HttpRequestHandler

此方法要实现HttpServlet,我们不能直接实现HttpServlet接口,而去实现HttpRequestHandler接口:
package com.xx.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.HttpRequestHandler;

import com.googlecode.jsonrpc4j.JsonRpcServer;

@Component("myServlet")
public class MyServlet implements HttpRequestHandler {

    @Autowired
    private TestManagerImpl testManagerImpl;

    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String requestURI = request.getRequestURI();
        requestURI = requestURI.substring(requestURI.lastIndexOf("/") + 1);
        JsonRpcServer server = testManagerImpl.getServer(requestURI);
        server.handle(request, response);

    }

}

此类被spring托管,我们用@Component("myServlet")注解方法,属性
    @Autowired
    private TestManagerImpl testManagerImpl;
   是我们需要注入的对象。

我们还需要在web.xml中配置此伪servlet:
<servlet>
    <display-name>myServlet</display-name>
    <servlet-name>myServlet</servlet-name>
    <servlet-class>
        org.springframework.web.context.support.HttpRequestHandlerServlet
    </servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>myServlet</servlet-name>
    <url-pattern>/myurl/*</url-pattern>
</servlet-mapping>

注意:servlet-class的配置类是:
      <servlet-class>
        org.springframework.web.context.support.HttpRequestHandlerServlet
    </servlet-class>


方法二:利用org.springframework.beans.factory.annotation.Configurable 注解与  SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this) 实现


package com.xxx.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;

import com.googlecode.jsonrpc4j.JsonRpcServer;

@Configurable
public class TestServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    @Autowired
    private TestManagerImpl   testManagerImpl;

    @Override
    public void init() throws ServletException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String requestURI = request.getRequestURI();
        requestURI = requestURI.substring(requestURI.lastIndexOf("/") + 1);
        JsonRpcServer server = testManagerImpl.getServer(requestURI);
        server.handle(request, response);

    }
}

属性:
  @Autowired
    private TestManagerImpl   testManagerImpl;
必须是@Autowired注解,此属性是我们需要注入的对象。

 web.xml的配置如下:

  <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.xxx.controller.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet/*</url-pattern>
    </servlet-mapping>

标准配置Servlet方式。
        还需一下配置spring xml:

         <context:component-scan base-package="com.xxx"/> 
<context:annotation-config/>
<context:spring-configured/>


效果图:



1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Spring的bean注入方式

Spring中依赖注入有三种注入方式: 一、构造器注入; 二、设值注入(setter方式注入); 三、Feild方式注入(注解方式注入)。   一、构造器注入   ...
  • baiyun8789
  • baiyun8789
  • 2015-06-28 16:24
  • 2373

7.5.7:注入嵌套Bean

如果某个Bean所依赖的Bean不想被Spring容器直接访问,可以使用嵌套Bean。元素用来定义嵌套Bean,嵌套Bean只对嵌套它的外部Bean有效,Spring容器无法直接访问嵌套Bean,因此...
  • confirmAname
  • confirmAname
  • 2013-07-18 02:27
  • 1292

Spring注入Bean的几种方式

首先,Bean的概念需要清晰: Bean是一种符合一定要求的Java类 1 有默认的构造函数 2 对于私有属性,有setter和getter满足了上述的条件,在工程中就可以在XML文件中定义类的...
  • hyichao_csdn
  • hyichao_csdn
  • 2015-06-30 21:21
  • 4552

Spring定义bean的三种方式和自动注入

前言:随着一个项目规模的增大,我们不得不引入许多Java bean对象,而这些对象一般来说是在Spring的配置文件applicationContext.xml中进行配置的,这样就声明了这是一个由Sp...
  • sinat_34596644
  • sinat_34596644
  • 2016-11-08 10:52
  • 16631

在spring的bean中注入内部类

在spring中注入内部类,有可能会遇到如下异常信息: 2014-5-14 21:52:45 org.springframework.context.support.AbstractApplicati...
  • z69183787
  • z69183787
  • 2016-02-01 15:14
  • 2169

Spring的《XML显式装配bean》之通过属性property注入bean

这篇blog主要是介绍两点: 1. 怎样通过属性向对象注入值? 2. 怎样通过属性向对象注入另一个对象的引用? 这里的给对象注入值不是通过构造器注入,而是通过setter方法直接给对象的属...
  • u010853261
  • u010853261
  • 2017-01-21 22:43
  • 2020

Spring自动装配注入合作者Bean ——autowire

spring能自动装配Bean和Bean之间的依赖关系,即无需使用ref显示指定依赖Bean。由BeanFactory检查Xml配置文件内容,根据某种规则,为主调Bean注入依赖关系。 自动装配可以...
  • u014470581
  • u014470581
  • 2016-03-11 12:35
  • 785

spring的注入bean的几种方式

平常的Java开发中,程序员在某个类中需要依赖其它类的方法。 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理。 Spring提出了依赖注入的思想,即依赖类...
  • lyt_7cs1dn9
  • lyt_7cs1dn9
  • 2017-03-24 15:27
  • 1201

Spring学习笔记二(Bean注入的几种方式)

1.前言 上一篇博客从宏观上讲解了一下Spring的知识,下面这篇来着重讲解一下有关Bean注入的几种方式。  2.Bean注入的几种方式 2.1 类构造器初始化 这也是默认的方式,在...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2015-08-10 14:33
  • 4966

Spring学习(十八)Bean 的三种依赖注入方式介绍

依赖注入:让调用类对某一接口实现类的依赖关系由第三方注入,以移除调用类对某一接口实现类的依赖。 接下来将详细的向大家介绍Spring容器支持的三种依赖注入的方式以及具体配置方法: •    属性注...
  • icarus_wang
  • icarus_wang
  • 2016-06-05 10:40
  • 6243
    个人资料
    • 访问:681053次
    • 积分:9295
    • 等级:
    • 排名:第2299名
    • 原创:253篇
    • 转载:182篇
    • 译文:9篇
    • 评论:68条
    博客专栏
    博客链接