|
|
|
@ -1,5 +1,5 @@ |
|
|
|
/* |
|
|
|
/* |
|
|
|
* Copyright 2002-2014 the original author or authors. |
|
|
|
* Copyright 2002-2015 the original author or authors. |
|
|
|
* |
|
|
|
* |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
@ -19,13 +19,17 @@ package org.springframework.context.annotation; |
|
|
|
import org.junit.Test; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.FactoryBean; |
|
|
|
import org.springframework.beans.factory.FactoryBean; |
|
|
|
|
|
|
|
import org.springframework.beans.factory.InitializingBean; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import static org.junit.Assert.*; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Tests cornering bug SPR-8514. |
|
|
|
* Tests cornering bug SPR-8514. |
|
|
|
* |
|
|
|
* |
|
|
|
* @author Chris Beams |
|
|
|
* @author Chris Beams |
|
|
|
|
|
|
|
* @author Juergen Hoeller |
|
|
|
* @since 3.1 |
|
|
|
* @since 3.1 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class ConfigurationWithFactoryBeanAndAutowiringTests { |
|
|
|
public class ConfigurationWithFactoryBeanAndAutowiringTests { |
|
|
|
@ -77,30 +81,52 @@ public class ConfigurationWithFactoryBeanAndAutowiringTests { |
|
|
|
ctx.register(WildcardParameterizedFactoryBeanInterfaceConfig.class); |
|
|
|
ctx.register(WildcardParameterizedFactoryBeanInterfaceConfig.class); |
|
|
|
ctx.refresh(); |
|
|
|
ctx.refresh(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void withFactoryBeanCallingBean() { |
|
|
|
|
|
|
|
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); |
|
|
|
|
|
|
|
ctx.register(AppConfig.class); |
|
|
|
|
|
|
|
ctx.register(FactoryBeanCallingConfig.class); |
|
|
|
|
|
|
|
ctx.refresh(); |
|
|
|
|
|
|
|
assertEquals("true", ctx.getBean("myString")); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DummyBean { |
|
|
|
static class DummyBean { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MyFactoryBean implements FactoryBean<String> { |
|
|
|
static class MyFactoryBean implements FactoryBean<String>, InitializingBean { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private boolean initialized = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void afterPropertiesSet() throws Exception { |
|
|
|
|
|
|
|
this.initialized = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public String getObject() throws Exception { |
|
|
|
public String getObject() throws Exception { |
|
|
|
return "foo"; |
|
|
|
return "foo"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public Class<String> getObjectType() { |
|
|
|
public Class<String> getObjectType() { |
|
|
|
return String.class; |
|
|
|
return String.class; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean isSingleton() { |
|
|
|
public boolean isSingleton() { |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public String getString() { |
|
|
|
|
|
|
|
return Boolean.toString(this.initialized); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MyParameterizedFactoryBean<T> implements FactoryBean<T> { |
|
|
|
static class MyParameterizedFactoryBean<T> implements FactoryBean<T> { |
|
|
|
|
|
|
|
|
|
|
|
private final T obj; |
|
|
|
private final T obj; |
|
|
|
|
|
|
|
|
|
|
|
@ -127,7 +153,8 @@ class MyParameterizedFactoryBean<T> implements FactoryBean<T> { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class AppConfig { |
|
|
|
static class AppConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
@Bean |
|
|
|
public DummyBean dummyBean() { |
|
|
|
public DummyBean dummyBean() { |
|
|
|
return new DummyBean(); |
|
|
|
return new DummyBean(); |
|
|
|
@ -136,7 +163,8 @@ class AppConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class ConcreteFactoryBeanImplementationConfig { |
|
|
|
static class ConcreteFactoryBeanImplementationConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private DummyBean dummyBean; |
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
@ -149,7 +177,8 @@ class ConcreteFactoryBeanImplementationConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class ParameterizedFactoryBeanImplementationConfig { |
|
|
|
static class ParameterizedFactoryBeanImplementationConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private DummyBean dummyBean; |
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
@ -162,7 +191,8 @@ class ParameterizedFactoryBeanImplementationConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class ParameterizedFactoryBeanInterfaceConfig { |
|
|
|
static class ParameterizedFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private DummyBean dummyBean; |
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
@ -175,7 +205,8 @@ class ParameterizedFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class NonPublicParameterizedFactoryBeanInterfaceConfig { |
|
|
|
static class NonPublicParameterizedFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private DummyBean dummyBean; |
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
@ -188,7 +219,8 @@ class NonPublicParameterizedFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class RawFactoryBeanInterfaceConfig { |
|
|
|
static class RawFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private DummyBean dummyBean; |
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
@ -202,7 +234,8 @@ class RawFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
@Configuration |
|
|
|
class WildcardParameterizedFactoryBeanInterfaceConfig { |
|
|
|
static class WildcardParameterizedFactoryBeanInterfaceConfig { |
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
@Autowired |
|
|
|
private DummyBean dummyBean; |
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
@ -212,3 +245,24 @@ class WildcardParameterizedFactoryBeanInterfaceConfig { |
|
|
|
return new MyFactoryBean(); |
|
|
|
return new MyFactoryBean(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
|
|
|
static class FactoryBeanCallingConfig { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
|
|
|
private DummyBean dummyBean; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
|
|
|
public MyFactoryBean factoryBean() { |
|
|
|
|
|
|
|
Assert.notNull(dummyBean, "DummyBean was not injected."); |
|
|
|
|
|
|
|
return new MyFactoryBean(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Bean |
|
|
|
|
|
|
|
public String myString() { |
|
|
|
|
|
|
|
return factoryBean().getString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|