diff --git a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
index 4f6ea37148..1e669114ce 100644
--- a/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
+++ b/akka-spring/src/main/scala/ActiveObjectFactoryBean.scala
@@ -12,6 +12,7 @@ import org.springframework.beans.BeanWrapper
import org.springframework.beans.BeanUtils
import org.springframework.util.ReflectionUtils
import org.springframework.util.StringUtils
+import org.springframework.context.{ApplicationContext,ApplicationContextAware}
import org.springframework.beans.factory.BeanFactory
import org.springframework.beans.factory.config.AbstractFactoryBean
import se.scalablesolutions.akka.actor.ActiveObject
@@ -26,7 +27,7 @@ import se.scalablesolutions.akka.util.Logging
* @author michaelkober
* @author Johan Rask
*/
-class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging {
+class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging with ApplicationContextAware {
import StringReflect._
import AkkaSpringConfigurationTags._
@@ -42,6 +43,7 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging {
@BeanProperty var dispatcher: DispatcherProperties = _
@BeanProperty var scope:String = VAL_SCOPE_SINGLETON
@BeanProperty var property:PropertyEntries = _
+ @BeanProperty var applicationContext:ApplicationContext = _
/*
* @see org.springframework.beans.factory.FactoryBean#getObjectType()
@@ -78,7 +80,11 @@ class ActiveObjectFactoryBean extends AbstractFactoryBean[AnyRef] with Logging {
private def setProperties(ref:AnyRef) : AnyRef = {
log.debug("Processing properties and dependencies for target class %s",target)
val beanWrapper = new BeanWrapperImpl(ref);
- for(entry <- property.entryList) {
+ if(ref.isInstanceOf[ApplicationContextAware]) {
+ log.debug("Setting application context")
+ beanWrapper.setPropertyValue("applicationContext",applicationContext)
+ }
+ for(entry <- property.entryList) {
val propertyDescriptor = BeanUtils.getPropertyDescriptor(ref.getClass,entry.name)
val method = propertyDescriptor.getWriteMethod();
diff --git a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java
index 37953173ec..7e29f5588d 100644
--- a/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java
+++ b/akka-spring/src/test/java/se/scalablesolutions/akka/spring/SampleBean.java
@@ -1,6 +1,15 @@
package se.scalablesolutions.akka.spring;
-public class SampleBean {
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.ApplicationContext;
+
+public class SampleBean implements ApplicationContextAware {
+
+ public boolean gotApplicationContext = false;
+
+ public void setApplicationContext(ApplicationContext context) {
+ gotApplicationContext = true;
+ }
public String foo(String s) {
return "hello " + s;
diff --git a/akka-spring/src/test/resources/appContext.xml b/akka-spring/src/test/resources/appContext.xml
index 5648fa2fdf..2da3ae0c00 100644
--- a/akka-spring/src/test/resources/appContext.xml
+++ b/akka-spring/src/test/resources/appContext.xml
@@ -15,7 +15,9 @@
-
+
+
+
\ No newline at end of file
diff --git a/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala b/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala
index f1c11d0eee..39544804da 100644
--- a/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala
+++ b/akka-spring/src/test/scala/ActiveObjectFactoryBeanTest.scala
@@ -69,6 +69,10 @@ class ActiveObjectFactoryBeanTest extends Spec with ShouldMatchers {
var ctx = new ClassPathXmlApplicationContext("appContext.xml");
val target:ResourceEditor = ctx.getBean("bean").asInstanceOf[ResourceEditor]
assert(target.getSource === "someString")
+
+ val sampleBean = ctx.getBean("sample").asInstanceOf[SampleBean];
+ Thread.sleep(300)
+ assert(sampleBean.gotApplicationContext)
}
}
}