From 07087b544d882450028597ef75a94fb92735b474 Mon Sep 17 00:00:00 2001 From: hekonsek Date: Sun, 24 Feb 2013 21:47:17 +0100 Subject: [PATCH] Fixed BeanPostProcessor detection. --- .../factory/function/Function0Wrapper.java | 5 ++ .../FunctionalGenericBeanDefinition.scala | 7 ++- .../function/FunctionalConfiguration.scala | 2 +- .../function/BeanPostProcessorTests.scala | 52 +++++++++++++++++++ 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/test/scala/org/springframework/scala/beans/factory/function/BeanPostProcessorTests.scala diff --git a/src/main/java/org/springframework/scala/beans/factory/function/Function0Wrapper.java b/src/main/java/org/springframework/scala/beans/factory/function/Function0Wrapper.java index 2cb1321..3acc29c 100644 --- a/src/main/java/org/springframework/scala/beans/factory/function/Function0Wrapper.java +++ b/src/main/java/org/springframework/scala/beans/factory/function/Function0Wrapper.java @@ -16,6 +16,7 @@ package org.springframework.scala.beans.factory.function; +import org.springframework.beans.factory.config.BeanPostProcessor; import scala.Function0; /** @@ -37,4 +38,8 @@ public static T apply(Function0 function) { return function.apply(); } + public static BeanPostProcessor applyAsBeanPostProcessor(Function0 function) { + return function.apply(); + } + } diff --git a/src/main/scala/org/springframework/scala/beans/factory/function/FunctionalGenericBeanDefinition.scala b/src/main/scala/org/springframework/scala/beans/factory/function/FunctionalGenericBeanDefinition.scala index eae2cc2..ae633bd 100644 --- a/src/main/scala/org/springframework/scala/beans/factory/function/FunctionalGenericBeanDefinition.scala +++ b/src/main/scala/org/springframework/scala/beans/factory/function/FunctionalGenericBeanDefinition.scala @@ -17,6 +17,7 @@ package org.springframework.scala.beans.factory.function import org.springframework.beans.factory.support.GenericBeanDefinition +import org.springframework.beans.factory.config.BeanPostProcessor /** * Default implementation of @@ -24,12 +25,14 @@ import org.springframework.beans.factory.support.GenericBeanDefinition * * @author Arjen Poutsma */ -class FunctionalGenericBeanDefinition[T](beanFunction: () => T) +class FunctionalGenericBeanDefinition[T](beanFunction: () => T)(implicit manifest: Manifest[T]) extends GenericBeanDefinition with FunctionalBeanDefinition[T] { setBeanClass(classOf[Function0Wrapper]) getConstructorArgumentValues.addIndexedArgumentValue(0, beanFunction) - setFactoryMethodName("apply") + val isBeanPostProcessor = classOf[BeanPostProcessor].isAssignableFrom(manifest.runtimeClass) + val factoryMethodName = if(isBeanPostProcessor) "applyAsBeanPostProcessor" else "apply" + setFactoryMethodName(factoryMethodName) def beanCreationFunction = beanFunction } diff --git a/src/main/scala/org/springframework/scala/context/function/FunctionalConfiguration.scala b/src/main/scala/org/springframework/scala/context/function/FunctionalConfiguration.scala index eb90217..7e33816 100644 --- a/src/main/scala/org/springframework/scala/context/function/FunctionalConfiguration.scala +++ b/src/main/scala/org/springframework/scala/context/function/FunctionalConfiguration.scala @@ -141,7 +141,7 @@ trait FunctionalConfiguration extends DelayedInit { val beanType = manifest.runtimeClass.asInstanceOf[Class[T]] - val fbd = new FunctionalGenericBeanDefinition(beanFunction) + val fbd = new FunctionalGenericBeanDefinition(beanFunction)(manifest) fbd.setScope(scope) fbd.setLazyInit(lazyInit) diff --git a/src/test/scala/org/springframework/scala/beans/factory/function/BeanPostProcessorTests.scala b/src/test/scala/org/springframework/scala/beans/factory/function/BeanPostProcessorTests.scala new file mode 100644 index 0000000..65e2d8e --- /dev/null +++ b/src/test/scala/org/springframework/scala/beans/factory/function/BeanPostProcessorTests.scala @@ -0,0 +1,52 @@ +/* + * Copyright 2011-2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.scala.beans.factory.function + +import org.scalatest.FunSuite +import org.junit.runner.RunWith +import org.scalatest.junit.JUnitRunner +import org.springframework.scala.context.function.{FunctionalConfigApplicationContext, FunctionalConfiguration} +import org.springframework.beans.factory.annotation.{AutowiredAnnotationBeanPostProcessor, Autowired} +import org.scalatest.matchers.ShouldMatchers + +@RunWith(classOf[JUnitRunner]) +class BeanPostProcessorTests extends FunSuite with ShouldMatchers { + + val applicationContext = new FunctionalConfigApplicationContext(classOf[ConfigWithBeanPostProcessor]) + + test("BeanPostProcessor support") { + applicationContext.getBean(classOf[AutowireSubject]).autowiredMember should not be (null) + } + +} + +class ConfigWithBeanPostProcessor extends FunctionalConfiguration { + + bean()(new AutowiredAnnotationBeanPostProcessor) + + bean()("autowireMe") + + bean()(new AutowireSubject) + +} + +class AutowireSubject { + + @Autowired + var autowiredMember : String = _ + +} \ No newline at end of file