diff --git a/beancontainer/api/pom.xml b/beancontainer/api/pom.xml
index b8996e1..4a74889 100644
--- a/beancontainer/api/pom.xml
+++ b/beancontainer/api/pom.xml
@@ -25,8 +25,7 @@
javax.enterprise
cdi-api
1.0-SP1
- jar
- compile
+ provided
junit
diff --git a/spring/pom.xml b/spring/pom.xml
index 59fc2e6..61f9c2d 100644
--- a/spring/pom.xml
+++ b/spring/pom.xml
@@ -42,11 +42,10 @@
- javax.enterprise
- cdi-api
- 1.0-SP1
- jar
- compile
+ org.apache.geronimo.specs
+ geronimo-jcdi_1.0_spec
+ 1.0
+ provided
junit
@@ -60,6 +59,7 @@
org.aspectj
aspectjrt
${aspectj.version}
+ test
@@ -77,24 +77,19 @@
org.springframework
spring-aop
${spring.version}
+ test
org.springframework
spring-aspects
${spring.version}
+ test
org.springframework
spring-web
${spring.version}
-
-
- org.springframework
- spring-tx
- ${spring.version}
-
-
org.apache.geronimo.specs
geronimo-servlet_3.0_spec
diff --git a/spring/src/META-INF/MANIFEST.MF b/spring/src/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ b/spring/src/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/spring/src/main/java/org/cdisource/springintegration/CdiBeanFactoryPostProcessor.java b/spring/src/main/java/org/cdisource/springintegration/CdiBeanFactoryPostProcessor.java
index 86de614..043a53d 100644
--- a/spring/src/main/java/org/cdisource/springintegration/CdiBeanFactoryPostProcessor.java
+++ b/spring/src/main/java/org/cdisource/springintegration/CdiBeanFactoryPostProcessor.java
@@ -1,18 +1,23 @@
package org.cdisource.springintegration;
+import java.lang.reflect.Type;
import java.util.Set;
import javax.enterprise.inject.spi.Bean;
-import javax.inject.Named;
+
+import org.cdisource.logging.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import static org.cdisource.logging.LogFactoryManager.logger;
public class CdiBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
+ private static Logger logger = logger(CdiBeanFactoryPostProcessor.class);
+
private boolean useLongName;
private BeanManagerLocationUtil beanManagerLocationUtil = new BeanManagerLocationUtil();
@@ -33,23 +38,40 @@ public void postProcessBeanFactory(
if (bean.getName()!=null && bean.getName().equals("Spring Injection")){
continue;
}
+ logger.debug("bean types = {}", bean.getTypes());
+ Class> beanClass = getBeanClass(bean);
BeanDefinitionBuilder definition = BeanDefinitionBuilder.rootBeanDefinition(CdiFactoryBean.class)
- .addPropertyValue("beanClass", bean.getBeanClass())
+ .addPropertyValue("beanClass", beanClass)
.addPropertyValue("beanManager", beanManagerLocationUtil.beanManager())
+ .addPropertyValue("qualifiers", bean.getQualifiers())
.setLazyInit(true);
String name = generateName(bean);
factory.registerBeanDefinition(name, definition.getBeanDefinition());
+ logger.debug("bean name = {}, bean class = {}", bean.getName(), beanClass.getName());
+ }
+ }
+
+ private Class> getBeanClass(Bean> bean) {
+ Class> klass = Object.class;
+ for (Type type : bean.getTypes()) {
+ if (type instanceof Class) {
+ Class> currentClass = (Class>) type;
+ if (klass.isAssignableFrom(currentClass)) {
+ klass = currentClass;
+ }
+ }
}
+ return klass;
}
private String generateName(Bean> bean) {
- Named named = (Named) bean.getBeanClass().getAnnotation(Named.class);
- String name = named != null ? named.value() : generateNameBasedOnClassName(bean);
+ String name = bean.getName() != null ? bean.getName() : generateNameBasedOnClassName(bean);
return name;
}
private String generateNameBasedOnClassName(Bean> bean) {
- return !useLongName ? bean.getBeanClass().getSimpleName() + "FactoryBean" : bean.getBeanClass().getName().replace(".", "_") + "FactoryBean";
+ Class> beanClass = getBeanClass(bean);
+ return !useLongName ? beanClass.getSimpleName() + "FactoryBean" : beanClass.getName().replace(".", "_") + "FactoryBean";
}
diff --git a/spring/src/main/java/org/cdisource/springintegration/CdiFactoryBean.java b/spring/src/main/java/org/cdisource/springintegration/CdiFactoryBean.java
index cf60a16..8d4723a 100644
--- a/spring/src/main/java/org/cdisource/springintegration/CdiFactoryBean.java
+++ b/spring/src/main/java/org/cdisource/springintegration/CdiFactoryBean.java
@@ -1,12 +1,15 @@
package org.cdisource.springintegration;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
import javax.enterprise.inject.spi.BeanManager;
-import org.springframework.beans.factory.FactoryBean;
-import org.springframework.beans.factory.InitializingBean;
import org.cdisource.beancontainer.BeanContainer;
import org.cdisource.beancontainer.BeanContainerImpl;
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
public class CdiFactoryBean implements FactoryBean