Browse Source
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2824 50f2f4bb-b051-0410-bef5-90022cba6387pull/1/head
4 changed files with 165 additions and 3 deletions
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<beans xmlns="http://www.springframework.org/schema/beans" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> |
||||
|
||||
<bean id="foo" class="org.springframework.context.annotation.Foo"> |
||||
<constructor-arg ref="barFactory"/> |
||||
</bean> |
||||
|
||||
<bean id="barFactory" class="org.springframework.context.annotation.BarFactory"/> |
||||
|
||||
</beans> |
||||
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
package org.springframework.context.annotation; |
||||
|
||||
import static org.hamcrest.CoreMatchers.is; |
||||
import static org.hamcrest.CoreMatchers.not; |
||||
import static org.junit.Assert.assertFalse; |
||||
import static org.junit.Assert.assertThat; |
||||
import static org.junit.Assert.assertTrue; |
||||
|
||||
import org.junit.Test; |
||||
import org.springframework.aop.support.AopUtils; |
||||
import org.springframework.beans.factory.FactoryBean; |
||||
import org.springframework.context.ApplicationContext; |
||||
import org.springframework.context.support.ClassPathXmlApplicationContext; |
||||
|
||||
/** |
||||
* Tests to verify that FactoryBean semantics are the same in Configuration |
||||
* classes as in XML. |
||||
* |
||||
* @author Chris Beams |
||||
*/ |
||||
public class Spr6602Tests { |
||||
@Test |
||||
public void testXmlBehavior() throws Exception { |
||||
doAssertions(new ClassPathXmlApplicationContext("Spr6602Tests-context.xml", Spr6602Tests.class)); |
||||
} |
||||
|
||||
@Test |
||||
public void testConfigurationClassBehavior() throws Exception { |
||||
doAssertions(new AnnotationConfigApplicationContext(FooConfig.class)); |
||||
} |
||||
|
||||
private void doAssertions(ApplicationContext ctx) throws Exception { |
||||
Foo foo = ctx.getBean(Foo.class); |
||||
|
||||
Bar bar1 = ctx.getBean(Bar.class); |
||||
Bar bar2 = ctx.getBean(Bar.class); |
||||
assertThat(bar1, is(bar2)); |
||||
assertThat(bar1, is(foo.bar)); |
||||
|
||||
BarFactory barFactory1 = ctx.getBean(BarFactory.class); |
||||
BarFactory barFactory2 = ctx.getBean(BarFactory.class); |
||||
assertThat(barFactory1, is(barFactory2)); |
||||
|
||||
Bar bar3 = barFactory1.getObject(); |
||||
Bar bar4 = barFactory1.getObject(); |
||||
assertThat(bar3, is(not(bar4))); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
@Configuration |
||||
class FooConfig { |
||||
public @Bean Foo foo() throws Exception { |
||||
return new Foo(barFactory().getObject()); |
||||
} |
||||
|
||||
public @Bean BarFactory barFactory() { |
||||
return new BarFactory(); |
||||
} |
||||
} |
||||
|
||||
class Foo { final Bar bar; public Foo(Bar bar) { this.bar = bar; } } |
||||
class Bar { } |
||||
|
||||
class BarFactory implements FactoryBean<Bar> { |
||||
|
||||
public Bar getObject() throws Exception { |
||||
return new Bar(); |
||||
} |
||||
|
||||
public Class<? extends Bar> getObjectType() { |
||||
return Bar.class; |
||||
} |
||||
|
||||
public boolean isSingleton() { |
||||
return true; |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue