diff --git a/org.springframework.beans/src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests-context.xml b/org.springframework.beans/src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests-context.xml
new file mode 100644
index 0000000000..d87aaffc63
--- /dev/null
+++ b/org.springframework.beans/src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests-context.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/org.springframework.beans/src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests.java b/org.springframework.beans/src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests.java
new file mode 100644
index 0000000000..964d9aa670
--- /dev/null
+++ b/org.springframework.beans/src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests.java
@@ -0,0 +1,72 @@
+package org.springframework.beans.factory;
+
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.config.AbstractFactoryBean;
+import org.springframework.beans.factory.xml.XmlBeanFactory;
+import org.springframework.core.io.ClassPathResource;
+
+
+/**
+ * Written with the intention of reproducing SPR-7318.
+ *
+ * @author Chris Beams
+ */
+public class FactoryBeanLookupTests {
+ private BeanFactory beanFactory;
+
+ @Before
+ public void setUp() {
+ beanFactory = new XmlBeanFactory(
+ new ClassPathResource("FactoryBeanLookupTests-context.xml", this.getClass()));
+ }
+
+ @Test
+ public void factoryBeanLookupByNameDereferencing() {
+ Object fooFactory = beanFactory.getBean("&fooFactory");
+ assertThat(fooFactory, instanceOf(FooFactoryBean.class));
+ }
+
+ @Test
+ public void factoryBeanLookupByType() {
+ FooFactoryBean fooFactory = beanFactory.getBean(FooFactoryBean.class);
+ assertNotNull(fooFactory);
+ }
+
+ @Test
+ public void factoryBeanLookupByTypeAndNameDereference() {
+ FooFactoryBean fooFactory = beanFactory.getBean("&fooFactory", FooFactoryBean.class);
+ assertNotNull(fooFactory);
+ }
+
+ @Test
+ public void factoryBeanObjectLookupByName() {
+ Object fooFactory = beanFactory.getBean("fooFactory");
+ assertThat(fooFactory, instanceOf(Foo.class));
+ }
+
+ @Test
+ public void factoryBeanObjectLookupByNameAndType() {
+ Foo foo = beanFactory.getBean("fooFactory", Foo.class);
+ assertNotNull(foo);
+ }
+}
+
+class FooFactoryBean extends AbstractFactoryBean {
+ @Override
+ protected Foo createInstance() throws Exception {
+ return new Foo();
+ }
+
+ @Override
+ public Class> getObjectType() {
+ return Foo.class;
+ }
+}
+
+class Foo { }
diff --git a/org.springframework.context/.springBeans b/org.springframework.context/.springBeans
index 264f050b81..f7eccf735e 100644
--- a/org.springframework.context/.springBeans
+++ b/org.springframework.context/.springBeans
@@ -1,7 +1,7 @@
1
-
+
@@ -11,6 +11,7 @@
src/test/java/org/springframework/context/annotation/configuration/SecondLevelSubConfig-context.xml
src/test/java/org/springframework/context/annotation/configuration/ImportXmlWithAopNamespace-context.xml
src/test/java/org/springframework/context/annotation/Spr6602Tests-context.xml
+ src/test/java/org/springframework/beans/factory/FactoryBeanLookupTests-context.xml