You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by gp...@apache.org on 2012/03/19 10:36:28 UTC
git commit: DELTASPIKE-121 BeanProvider#injectFields
Updated Branches:
refs/heads/master 56af95587 -> 04017e4c6
DELTASPIKE-121 BeanProvider#injectFields
and minor cleanup
Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/04017e4c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/04017e4c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/04017e4c
Branch: refs/heads/master
Commit: 04017e4c6fa6cae90eccc14632f469a2ad0337c8
Parents: 56af955
Author: gpetracek <gp...@apache.org>
Authored: Mon Mar 19 10:31:14 2012 +0100
Committer: gpetracek <gp...@apache.org>
Committed: Mon Mar 19 10:31:14 2012 +0100
----------------------------------------------------------------------
.../deltaspike/core/api/provider/BeanProvider.java | 38 +++++++++++++-
.../test/core/api/provider/BeanProviderTest.java | 27 ++++++++++
.../test/core/api/provider/ManualBean.java | 34 +++++++++++++
.../test/core/api/provider/TestBean.java | 2 +-
4 files changed, 97 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/04017e4c/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
index 6af4afa..2b9224d 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/provider/BeanProvider.java
@@ -23,8 +23,10 @@ import org.apache.deltaspike.core.api.literal.AnyLiteral;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.Typed;
+import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Arrays;
@@ -70,7 +72,7 @@ public final class BeanProvider
* @param qualifiers additional qualifiers which further distinct the resolved bean
* @param <T> target type
* @return the resolved Contextual Reference
- * @throws {@code IllegalStateException} if the bean could not be found.
+ * @throws IllegalStateException if the bean could not be found.
* @see #getContextualReference(Class, boolean, Annotation...)
*/
public static <T> T getContextualReference(Class<T> type, Annotation... qualifiers)
@@ -118,7 +120,7 @@ public final class BeanProvider
*
* @param name the EL name of the bean
* @return the resolved Contextual Reference
- * @throws {@code IllegalStateException} if the bean could not be found.
+ * @throws IllegalStateException if the bean could not be found.
* @see #getContextualReference(String, boolean)
*/
public static Object getContextualReference(String name)
@@ -238,12 +240,41 @@ public final class BeanProvider
for (Bean<?> bean : beans)
{
+ //noinspection unchecked
result.add(getContextualReference(type, beanManager,
- new HashSet<Bean<?>>((Collection) Arrays.asList(new Object[]{bean}))));
+ new HashSet<Bean<?>>((Collection) Arrays.asList(bean))));
}
return result;
}
+ /**
+ * Allows to perform dependency injection for instances which aren't managed by CDI
+ * <p/>
+ * Attention:<br/>
+ * The resulting instance isn't managed by CDI, only fields annotated with @Inject get initialized.
+ *
+ * @param instance current instance
+ * @param <T> current type
+ * @return instance with injected fields (if possible - or null if the given instance is null)
+ */
+ @SuppressWarnings("unchecked")
+ public static <T> T injectFields(T instance)
+ {
+ if (instance == null)
+ {
+ return null;
+ }
+
+ BeanManager beanManager = getBeanManager();
+
+ CreationalContext creationalContext = beanManager.createCreationalContext(null);
+
+ AnnotatedType annotatedType = beanManager.createAnnotatedType(instance.getClass());
+ InjectionTarget injectionTarget = beanManager.createInjectionTarget(annotatedType);
+ injectionTarget.inject(instance, creationalContext);
+ return instance;
+ }
+
private static Set<Bean<?>> filterDefaultScopedBeans(Set<Bean<?>> beans)
{
Set<Bean<?>> result = new HashSet<Bean<?>>(beans.size());
@@ -285,6 +316,7 @@ public final class BeanProvider
/**
* Internal method to resolve the BeanManager via the {@link BeanManagerProvider}
+ * @return current bean-manager
*/
private static BeanManager getBeanManager()
{
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/04017e4c/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
index 33506c8..8884e31 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/BeanProviderTest.java
@@ -173,4 +173,31 @@ public class BeanProviderTest
Assert.assertEquals(1, result.size());
}
+
+ /*
+ * create a manual instance, inject dependencies, set values of the dependencies and check the referenced cdi bean
+ */
+ @Test
+ public void injectBeansInNonManagedInstance() throws Exception
+ {
+ ManualBean manualBean = new ManualBean();
+
+ Assert.assertNull(manualBean.getTestBean());
+
+ BeanProvider.injectFields(manualBean);
+
+ Assert.assertNotNull(manualBean.getTestBean());
+
+ Assert.assertEquals(4711, manualBean.getTestBean().getI());
+
+ int newValue = 14;
+
+ manualBean.getTestBean().setI(newValue);
+
+ Assert.assertEquals(newValue, manualBean.getTestBean().getI());
+
+ TestBean testBean = BeanProvider.getContextualReference(TestBean.class);
+
+ Assert.assertEquals(newValue, testBean.getI());
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/04017e4c/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/ManualBean.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/ManualBean.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/ManualBean.java
new file mode 100644
index 0000000..09cd94b
--- /dev/null
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/ManualBean.java
@@ -0,0 +1,34 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you 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.apache.deltaspike.test.core.api.provider;
+
+import javax.enterprise.inject.Typed;
+import javax.inject.Inject;
+
+@Typed()
+class ManualBean
+{
+ @Inject
+ private TestBean testBean;
+
+ TestBean getTestBean()
+ {
+ return testBean;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/04017e4c/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/TestBean.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/TestBean.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/TestBean.java
index e4e73e4..dcf56a7 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/TestBean.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/provider/TestBean.java
@@ -25,7 +25,7 @@ import javax.inject.Named;
@ApplicationScoped
public class TestBean
{
- int i=4711;
+ private int i = 4711;
public int getI()
{