Index: resteasy-spring/src/test/java/org/jboss/resteasy/spring/FieldInjectedResource.java
===================================================================
--- resteasy-spring/src/test/java/org/jboss/resteasy/spring/FieldInjectedResource.java	(revision 0)
+++ resteasy-spring/src/test/java/org/jboss/resteasy/spring/FieldInjectedResource.java	(revision 0)
@@ -0,0 +1,59 @@
+package org.jboss.resteasy.spring;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.UriInfo;
+
+
+@Path("/echo")
+@Produces(MediaType.TEXT_PLAIN)
+public class FieldInjectedResource {
+
+    private UriInfo ui;
+
+    private HttpHeaders headers;
+
+    @Context
+    public void setUriInfo(UriInfo ui) {
+        this.ui = ui;
+    }
+
+    @Context
+    public void setHttpHeaders(HttpHeaders headers) {
+        this.headers = headers;
+    }
+
+    @GET
+    @Path("/uri")
+    public String echoURI() {
+        sleep();
+        return (ui != null ? ui.getRequestUriBuilder().build().toString() : "null");
+    }
+
+
+    @GET
+    @Path("/headers")
+    public String echoHeaders() {
+        sleep();
+        return (headers != null && headers.getRequestHeader(HttpHeaders.ACCEPT) != null
+                ? (ui != null
+                   ? ui.getRequestUriBuilder().build().toString()
+                   : "null") + ":" +
+                headers.getRequestHeader(HttpHeaders.ACCEPT).get(0) : "null");
+    }
+
+    private void sleep() {
+        try {
+            Thread.sleep((int)(Math.random() * 1000));
+        } catch (Exception e) {
+        }
+    }
+}
\ No newline at end of file
Index: resteasy-spring/src/test/java/org/jboss/resteasy/spring/SpringPoweredWebappTest.java
===================================================================
--- resteasy-spring/src/test/java/org/jboss/resteasy/spring/SpringPoweredWebappTest.java	(revision 0)
+++ resteasy-spring/src/test/java/org/jboss/resteasy/spring/SpringPoweredWebappTest.java	(revision 0)
@@ -0,0 +1,111 @@
+package org.jboss.resteasy.spring;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import com.meterware.httpunit.GetMethodWebRequest;
+import com.meterware.httpunit.HttpUnitOptions;
+import com.meterware.httpunit.WebRequest;
+import com.meterware.httpunit.WebResponse;
+import com.meterware.servletunit.ServletRunner;
+import com.meterware.servletunit.ServletUnitClient;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+
+public class SpringPoweredWebappTest extends Assert {
+
+    private static final String BASE_URL = "http://somehost";
+    private static final String CONTEXT_PATH = "/spring-powered";
+    private static final String PATH = "/echo";
+    private static final String CONFIG_PATH = "/WEB-INF/web.xml";
+    private static final String EXPECTED_URI = BASE_URL + CONTEXT_PATH + PATH + "/uri";
+    private static final String EXPECTED_HEADERS = BASE_URL + CONTEXT_PATH + PATH + "/headers" + "?:text/plain";
+    protected ServletRunner runner;
+
+    @Before
+    public void setUpServlet() throws Exception {
+        InputStream config = getClass().getResourceAsStream(CONFIG_PATH);
+        runner = new ServletRunner(config, CONTEXT_PATH);
+        HttpUnitOptions.setExceptionsThrownOnErrorStatus(true);
+    }
+
+    @Test
+    public void testGetUri() throws Exception {
+        doTestGet(PATH + "/uri", EXPECTED_URI);
+    }
+
+    @Test
+    public void testGetHeaders() throws Exception {
+        doTestGet(PATH + "/headers", EXPECTED_HEADERS);
+    }
+
+    @Test
+    public void testConcurrent() throws Exception {
+        // ensure concurrent invocations see different injected values
+        Thread uri = new Thread(new Runnable() {
+            public void run() {
+                for (int i = 0 ; i < 10 ; i++) {
+                    try {
+                        doTestGet(PATH + "/uri", EXPECTED_URI);
+                    } catch (Exception e) {
+                        fail(e.toString());
+                    }
+                }
+            }
+        });
+        Thread headers = new Thread(new Runnable() {
+            public void run() {
+                for (int i = 0 ; i < 10 ; i++) {
+                    try {
+                        doTestGet(PATH + "/headers", EXPECTED_HEADERS);
+                    } catch (Exception e) {
+                        fail(e.toString());
+                    }
+                }
+            }
+        });
+        uri.start();
+        headers.start();
+        uri.join();
+        headers.join();
+    }
+
+
+    private void doTestGet(String context, String expectedReponsePattern) throws Exception {
+        ServletUnitClient client = runner.newClient();
+        WebRequest request = new GetMethodWebRequest(BASE_URL + CONTEXT_PATH + context);
+        request.setHeaderField("Accept", "text/plain");
+
+        verify(client.getResponse(request), 200, expectedReponsePattern);
+    }
+
+
+    private void verify(WebResponse response,
+                        int expectedStatus,
+                        String expectedResponsePattern) throws Exception {
+        assertEquals("unexpected response code", expectedStatus, response.getResponseCode());
+        if (expectedResponsePattern != null) {
+            InputStream is = response.getInputStream();
+            String respStr = toString(is);
+            assertTrue("unexpected response: " + respStr
+                       + ", no match for: " + expectedResponsePattern,
+                       respStr.indexOf(expectedResponsePattern) != -1);
+        }
+    }
+
+    private String toString(InputStream is) throws IOException {
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        int c = is.read();
+        while (c != -1) {
+            os.write(c);
+            c = is.read();
+        }
+        os.flush();
+        return os.toString();
+    }
+}
\ No newline at end of file
Index: resteasy-spring/src/test/resources/WEB-INF/web.xml
===================================================================
--- resteasy-spring/src/test/resources/WEB-INF/web.xml	(revision 0)
+++ resteasy-spring/src/test/resources/WEB-INF/web.xml	(revision 0)
@@ -0,0 +1,27 @@
+<!DOCTYPE web-app PUBLIC
+        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+        "http://java.sun.com/dtd/web-app_2_3.dtd" >
+
+<web-app>
+   <display-name>Spring-Powered Webapp Test</display-name>
+
+   <listener>
+      <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
+   </listener>
+
+   <listener>
+      <listener-class>org.jboss.resteasy.plugins.spring.SpringContextLoaderListener</listener-class>
+   </listener>
+
+   <servlet>
+      <servlet-name>Resteasy</servlet-name>
+      <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
+   </servlet>
+
+   <servlet-mapping>
+      <servlet-name>Resteasy</servlet-name>
+      <url-pattern>/*</url-pattern>
+   </servlet-mapping>
+
+</web-app>
+
Index: resteasy-spring/src/main/java/org/jboss/resteasy/plugins/spring/SpringBeanProcessor.java
===================================================================
--- resteasy-spring/src/main/java/org/jboss/resteasy/plugins/spring/SpringBeanProcessor.java	(revision 1079)
+++ resteasy-spring/src/main/java/org/jboss/resteasy/plugins/spring/SpringBeanProcessor.java	(working copy)
@@ -45,6 +45,13 @@
 
    protected class ResteasyBeanPostProcessor implements BeanPostProcessor
    {
+      private ConfigurableListableBeanFactory beanFactory;
+  
+      protected ResteasyBeanPostProcessor(ConfigurableListableBeanFactory beanFactory) 
+      {
+         this.beanFactory = beanFactory;
+      }
+
       public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
       {
          return bean;
@@ -58,7 +65,7 @@
          PropertyInjector propertyInjector = resourceFactory.getPropertyInjector();
 
          HttpRequest request = ResteasyProviderFactory.getContextData(HttpRequest.class);
-         if (request == null)
+         if (isSingleton(beanName) || request == null)
          {
             propertyInjector.inject(bean);
          }
@@ -70,6 +77,18 @@
 
          return bean;
       }
+
+      private boolean isSingleton(String beanName)
+      {
+         boolean isSingleton = false;
+         try {
+    	     BeanDefinition beanDef = beanFactory.getBeanDefinition(beanName);
+             isSingleton = beanDef.isSingleton();
+         } catch (org.springframework.beans.factory.NoSuchBeanDefinitionException nsbde) {
+             // cannot distinguish between singleton & prototype
+         }
+         return isSingleton;
+      }
    }
 
    public SpringBeanProcessor(Dispatcher dispatcher)
@@ -164,7 +183,7 @@
       {
          beanFactory.registerResolvableDependency(Dispatcher.class, getDispatcher());
       }
-      beanFactory.addBeanPostProcessor(new ResteasyBeanPostProcessor());
+      beanFactory.addBeanPostProcessor(new ResteasyBeanPostProcessor(beanFactory));
       Collection<String> ignoreList = createIgnoreList(beanFactory);
 
       List<SpringResourceFactory> springResourceFactories = new ArrayList<SpringResourceFactory>();
Index: resteasy-spring/WEB-INF/applicationContext.xml
===================================================================
--- resteasy-spring/WEB-INF/applicationContext.xml	(revision 0)
+++ resteasy-spring/WEB-INF/applicationContext.xml	(revision 0)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<beans default-init-method="populate"
+  xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:p="http://www.springframework.org/schema/p"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans
+  http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
+
+  <bean id="fieldInjectedResource"
+        lazy-init="true"
+        class="org.jboss.resteasy.spring.FieldInjectedResource"/>
+
+</beans>
Index: resteasy-spring/pom.xml
===================================================================
--- resteasy-spring/pom.xml	(revision 1079)
+++ resteasy-spring/pom.xml	(working copy)
@@ -111,6 +111,30 @@
             <version>4.4</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>httpunit</groupId>
+            <artifactId>httpunit</artifactId>
+            <scope>test</scope>
+            <version>1.7</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.servlet</groupId>
+                    <artifactId>servlet-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xercesImpl</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>xerces</groupId>
+                    <artifactId>xmlParserAPIs</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>jtidy</groupId>
+                    <artifactId>jtidy</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
         <!--
            Needed for javax.annotation.security.* which is part of javaee 6 XXX
            should this dependency be <scope>provided</scope> and only used if
