Move SpringBeanFactory
diff --git a/core/pom.xml b/core/pom.xml
index 566b240..61a1231 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -135,11 +135,6 @@
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
             <artifactId>spring-aop</artifactId>
             <scope>provided</scope>
             <optional>true</optional>
diff --git a/core/src/main/java/org/apache/cxf/annotations/FactoryType.java b/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
index e9a83b7..50e4436 100644
--- a/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
+++ b/core/src/main/java/org/apache/cxf/annotations/FactoryType.java
@@ -24,6 +24,9 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.service.invoker.Factory;
 /**
  * Defines the factory used for the service.
  * 
@@ -45,16 +48,21 @@
      *    1) The Class for the service
      *    2) String[] of the args from above 
      */
-    Class<?> factoryClass() default DEFAULT.class;
+    Class<? extends Factory> factoryClass() default DEFAULT.class;
     
     enum Type {
         Singleton,
         Session,
         Pooled, //args[0] is the size of the pool
         PerRequest,
-        Spring, //args[0] is the Spring bean name
     };
     
-    static final class DEFAULT { }
+    static final class DEFAULT implements Factory {
+        public Object create(Exchange e) throws Throwable {
+            return null;
+        }
+        public void release(Exchange e, Object o) {
+        } 
+    }
 }
 
diff --git a/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java b/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
index 655eb68..05ee510 100644
--- a/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
+++ b/core/src/main/java/org/apache/cxf/service/factory/AnnotationsFactoryBeanListener.java
@@ -53,7 +53,6 @@
 import org.apache.cxf.service.invoker.PooledFactory;
 import org.apache.cxf.service.invoker.SessionFactory;
 import org.apache.cxf.service.invoker.SingletonFactory;
-import org.apache.cxf.service.invoker.SpringBeanFactory;
 import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.FaultInfo;
@@ -190,16 +189,13 @@
                     case Pooled:
                         f = new PooledFactory(cls, Integer.parseInt(scope.args()[0]));
                         break;
-                    case Spring:
-                        f = new SpringBeanFactory(scope.args()[0]);
-                        break;
                     default:
                         f = new SingletonFactory(cls);
                         break;
                     }
                 } else {
                     try {
-                        f = (Factory)scope.factoryClass().getConstructor(Class.class, String[].class)
+                        f = scope.factoryClass().getConstructor(Class.class, String[].class)
                             .newInstance(cls, scope.args());
                     } catch (Throwable t) {
                         throw new ServiceConstructionException(t);
diff --git a/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java b/rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
similarity index 88%
rename from core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
rename to rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
index f942019..74e7182 100644
--- a/core/src/main/java/org/apache/cxf/service/invoker/SpringBeanFactory.java
+++ b/rt/spring/src/main/java/org/apache/cxf/service/invoker/spring/SpringBeanFactory.java
@@ -17,9 +17,10 @@
  * under the License.
  */
 
-package org.apache.cxf.service.invoker;
+package org.apache.cxf.service.invoker.spring;
 
 import org.apache.cxf.message.Exchange;
+import org.apache.cxf.service.invoker.Factory;
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
@@ -34,12 +35,15 @@
  * to pool the beans or the SessionFactory or similar.
  */
 public class SpringBeanFactory implements Factory, ApplicationContextAware {
-    ApplicationContext ctx;
-    String beanName;
+    volatile ApplicationContext ctx;
+    final String beanName;
     
     public SpringBeanFactory(String name) {
         beanName = name;
     }
+    public SpringBeanFactory(Class<?> cls, String args[]) {
+        beanName = args[0];
+    }
     
     /** {@inheritDoc}*/
     public Object create(Exchange e) throws Throwable {
diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java b/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
index c9a9b8b..c7265e7 100644
--- a/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
+++ b/systests/transports/src/test/java/org/apache/cxf/systest/http/SpringAnnotationGreeterImpl.java
@@ -24,18 +24,18 @@
 import javax.xml.ws.AsyncHandler;
 import javax.xml.ws.Response;
 
-
 import org.apache.cxf.annotations.FactoryType;
 import org.apache.cxf.greeter_control.Greeter;
 import org.apache.cxf.greeter_control.types.GreetMeResponse;
 import org.apache.cxf.greeter_control.types.PingMeResponse;
 import org.apache.cxf.greeter_control.types.SayHiResponse;
+import org.apache.cxf.service.invoker.spring.SpringBeanFactory;
 
 @WebService(serviceName = "GreeterService",
             portName = "GreeterPort",
             endpointInterface = "org.apache.cxf.greeter_control.Greeter", 
             targetNamespace = "http://cxf.apache.org/greeter_control")
-@FactoryType(value = FactoryType.Type.Spring, args = { "SpringBean" })
+@FactoryType(factoryClass = SpringBeanFactory.class, args = { "SpringBean" })
 public class SpringAnnotationGreeterImpl implements Greeter {
     String name;