diff --git a/blueprint/blueprint-spring/pom.xml b/blueprint/blueprint-spring/pom.xml
index 7ce6dcabd9..9be69d5eff 100644
--- a/blueprint/blueprint-spring/pom.xml
+++ b/blueprint/blueprint-spring/pom.xml
@@ -24,7 +24,7 @@
org.apache.aries.blueprint
blueprint-parent
- 1.0.0
+ 1.0.1-SNAPSHOT
../blueprint-parent/pom.xml
@@ -58,9 +58,10 @@
org.apache.aries.blueprint.spring.Activator
- 1.0.0
- 1.9.0
- 1.5.0
+ 1.0.1
+ 1.10.3
+ 1.6.1
+ 5.3.39
@@ -119,13 +120,13 @@
org.springframework
spring-context
- 4.2.2.RELEASE
+ ${spring.version}
provided
org.springframework
spring-beans
- 4.2.2.RELEASE
+ ${spring.version}
provided
@@ -178,13 +179,13 @@
org.springframework
spring-tx
- 4.2.2.RELEASE
+ ${spring.version}
test
org.springframework
spring-aop
- 4.2.2.RELEASE
+ ${spring.version}
test
diff --git a/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java b/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java
index 922e182999..bcd929e663 100644
--- a/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java
+++ b/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintBeanFactory.java
@@ -18,7 +18,9 @@
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import org.apache.aries.blueprint.ComponentDefinitionRegistry;
import org.apache.aries.blueprint.services.ExtendedBlueprintContainer;
@@ -37,11 +39,14 @@
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
+import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.core.ResolvableType;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
+import org.springframework.lang.Nullable;
public class BlueprintBeanFactory extends DefaultListableBeanFactory implements ResourceLoader {
@@ -123,7 +128,7 @@ public List getDependsOn() {
@Override
public String getClassName() {
- return null;
+ return getDefinition().getBeanClassName();
}
@Override
@@ -218,7 +223,30 @@ public T getBean(String name, Class requiredType) throws BeansException {
@Override
public T getBean(Class requiredType) throws BeansException {
- throw new UnsupportedOperationException();
+ T beanToReturn = null;
+ Set beanNames = new HashSet();
+ for (String name : container.getComponentIds()) {
+ ComponentMetadata cmeta = container.getComponentMetadata(name);
+ try {
+ if (requiredType != null && cmeta != null && cmeta instanceof BeanMetadata
+ && ((BeanMetadata) cmeta).getClassName() != null
+ && !requiredType.isAssignableFrom(Class.forName(((BeanMetadata) cmeta).getClassName()))) {
+ try {
+ Object bean = getBean(name);
+ bean = container.getConverter().convert(bean, new ReifiedType(requiredType));
+ beanToReturn = (T) bean;
+ beanNames.add(name);
+ } catch (Exception ex) {
+ }
+ }
+ } catch (ClassNotFoundException cfne) {
+
+ }
+ }
+ if (beanNames.size() > 1) {
+ throw new NoUniqueBeanDefinitionException(requiredType, beanNames);
+ }
+ return beanToReturn;
}
@Override
@@ -265,5 +293,52 @@ public Class> getType(String name) throws NoSuchBeanDefinitionException {
public String[] getAliases(String name) {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public ObjectProvider getBeanProvider(final Class requiredType) {
+ return new ObjectProvider() {
+ @Override
+ public T getObject() throws BeansException {
+ return getBean(requiredType);
+ }
+
+ @Override
+ public T getObject(Object... args) throws BeansException {
+ return getBean(requiredType, args);
+ }
+
+ @Override
+ @Nullable
+ public T getIfAvailable() throws BeansException {
+ try {
+ return getBean(requiredType);
+ } catch (NoUniqueBeanDefinitionException ex) {
+ throw ex;
+ } catch (NoSuchBeanDefinitionException ex) {
+ return null;
+ }
+ }
+
+ @Override
+ @Nullable
+ public T getIfUnique() throws BeansException {
+ try {
+ return getBean(requiredType);
+ } catch (NoSuchBeanDefinitionException ex) {
+ return null;
+ }
+ }
+ };
+ }
+
+ @Override
+ public ObjectProvider getBeanProvider(ResolvableType requiredType) {
+ return (ObjectProvider) getBeanProvider(requiredType.resolve());
+ }
+
+ @Override
+ public Class> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException {
+ return getBean(name).getClass();
+ }
}
}
diff --git a/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java b/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
index deee304e19..2547c5307c 100644
--- a/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
+++ b/blueprint/blueprint-spring/src/main/java/org/apache/aries/blueprint/spring/BlueprintNamespaceHandler.java
@@ -147,7 +147,7 @@ private org.springframework.beans.factory.xml.ParserContext getOrCreateParserCon
if (applicationContext == null) {
applicationContext = new SpringApplicationContext(container);
registry.registerComponentDefinition(createPassThrough(parserContext,
- SPRING_APPLICATION_CONTEXT_ID, applicationContext, "destroy"
+ SPRING_APPLICATION_CONTEXT_ID, applicationContext, "close"
));
}
// Create registry