2017-01-20 2 views
0

@ComponentScan я использовал на Application класса и использовать @Configuration в моем классе конфигурации, в моем классе конфигурации, я хочу, чтобы ввести фасоль, определенные в другом классе конфигурации с помощью @Autowired аннотацию , но когда я запускаю приложение, я получил null для этих полей.Spring загрузки - @Autowired не работает на классе @Configuration

@Configuration 
public class AConfiguration { 

    @Bean 
    public A getA(){ 
     return ..; 
    } 
} 

@Configuration 
public class BConfiguration { 

    @Autowired 
    private A a; 

    @Bean 
    public B getB() { 
     **something need a, but a is null** 
    } 
} 

@EnableCaching 
@Configuration 
public class EhcacheConfiguration extends CachingConfigurerSupport { 

    @Bean 
    @Override 
    public CacheManager cacheManager() { 
     return new EhCacheCacheManager(ehCacheCacheManager().getObject()); 
    } 

    @Bean 
    public EhCacheManagerFactoryBean ehCacheCacheManager() { 
     EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean(); 
     cmfb.setConfigLocation(new ClassPathResource("ehcache.xml")); 
     cmfb.setShared(true); 
     return cmfb; 
    } 

} 

@Configuration 
@DependsOn("ehcacheConfiguration") 
public class ShiroConfiguration { 

    @Autowired 
    private org.springframework.cache.CacheManager cacheManager; 

} 

@SpringBootApplication 
@EnableTransactionManagement 
public class JarApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(JarApplication.class, args); 
    } 

} 
+0

Является классом 'AConfiguration', используя любые компоненты из' BConfiguration'? –

+0

@KenBekov, No, AConfiguration не использует никаких компонентов из BConfiguration –

+0

Autowire 'A' в метод getB вместо переменной-члена Spring лучше распознает зависимости между классами. поэтому вместо этого напишите 'getB (A a)'. –

ответ

0

Вы можете попробовать это.

@Configuration 
    public class AConfiguration { 
     @Bean 
     public A getA(){ 
      return ..; 
     } 
    } 

    @Configuration 
    public class BConfiguration { 

     @Autowired 
     private A a; 

     public B getB() { 
      **something need a, but a is null** 
     } 
    } 
+0

Пожалуйста, уточните, почему он должен работать. – rptwsthi

+0

Я был небрежен. У меня была аннотация @Bean, я забыл, когда я редактировал вопрос. –

+0

Я буду отвечать на мой вопрос –

Смежные вопросы