2014-11-10 20 views
5

Eğer Java Bean JavaConfig ile yapılandırılmışsa, BeanDefinition BeanClassName çözümünü çözemez ve null döndürür. xml veya ek açıklama yapılandırmasıyla aynı şekilde çalışır. Sorun nedir? Nasıl düzeltilir? Bahar Boot için başım ileSpring, JavaConfig, BeanDefinition ve boş getBeanClassName

Örnek kod, yalnızca ithalatı ekleyin: XML tabanlı konfigürasyon kullanılan YouTube, bir bahar atölye izlerken

interface Foo {} 

class FooImpl implements Foo {} 

@ComponentScan 
@EnableAutoConfiguration 
@Configuration 
public class App implements CommandLineRunner { 
    public static void main(String... args) { 
     SpringApplication.run(App.class, args); 
    } 

    @Bean(name = "foo") 
    Foo getFoo() { return new FooImpl(); } 

    @Autowired 
    private ConfigurableListableBeanFactory factory; 

    @Override 
    public void run(String... args) { 
     BeanDefinition definition = factory.getBeanDefinition("foo"); 
     System.out.println(definition.getBeanClassName()); 
    } 
} 

cevap

2

Aynı sorun yüzleştim. Tabii ki, benim çözüm üretilmeye hazır değil ve kesmek gibi görünüyor, ama benim sorun çözüldü:

BeanDefinition beanDefinition; 
AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition) bd; 
StandardMethodMetadata factoryMethodMetadata = (StandardMethodMetadata) annotatedBeanDefinition.getFactoryMethodMetadata(); 
Class<?> originalClass = factoryMethodMetadata.getIntrospectedMethod().getReturnType(); 

Edit 1 Bu çıkıyor o sen stereotip ek açıklama kullanarak yapılandırma sınıfının dışında fasulye tanımlarsanız, herşey güzel çalışacaktır:

@Configuration 
@ComponentScan(value = "foo.bar") 
public class Config {} 

ve

package foo.bar.model.impl 

@Component 
class FooImpl implements Foo {...}