Spring @EnableCaching с проблемой @Inject/@Autowired

Я обнаружил проблему при использовании аннотации @EnableCaching вместе с @Inject/@Autowired в классе @Configuration:

Простой пример для воспроизведения:

Класс конфигурации:

@Configuration
@EnableCaching
public class CacheConfig {

    @Inject
    private DataSource dataSource;

    @Bean
    public CacheManager cacheManager(){
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache("books")));
        return cacheManager;
    }

    @Configuration
    static class DevProfileConfig {
        @Bean(destroyMethod = "shutdown")
        public DataSource dataSource() {
            EmbeddedDatabaseFactory factory = new EmbeddedDatabaseFactory();
            factory.setDatabaseType(EmbeddedDatabaseType.HSQL);
            return factory.getDatabase();
        }
    }
}

Средство запуска контекста приложения:

public class CacheConfigLauncher {
    public static void main(String args[]){
        ApplicationContext springAppContext = new AnnotationConfigApplicationContext(CacheConfig.class);
    }
}

Ошибка:

Вызвано: org.springframework.beans.factory.BeanDefinitionStoreException: фабричный метод [public org.springframework.cache.CacheManager spring.samples.config.CacheConfig.cacheManager()] вызвал исключение; вложенным исключением является java.lang.IllegalArgumentException: объект класса [null] должен быть экземпляром интерфейса org.springframework.beans.factory.config.ConfigurableBeanFactory в org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java :188) в org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:573) ... еще 76

Вызвано: java.lang.IllegalArgumentException: объект класса [null] должен быть экземпляром интерфейса org.springframework.beans.factory.config.ConfigurableBeanFactory в org.springframework.util.Assert.isInstanceOf(Assert.java:339) в org.springframework.util.Assert.isInstanceOf(Assert.java:319) в org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.getBeanFactory(ConfigurationClassEnhancer.java:414) в org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor. перехват(ConfigurationClassEnhancer.java:289) в spring.samples.config.CacheConfig$$EnhancerByCGLIB$$f6ceccea.cacheManager() в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:491) в org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166) ... еще 77

Однако, если вы закомментируете либо поле @Inject'ed, либо конфигурация аннотации @EnableCaching, загрузится без ошибок!!!

Это похоже на ошибку для меня. Кто-нибудь сталкивался с такой же проблемой или, возможно, я что-то упускаю?

Спасибо,

Олег


person Oleg Tsal-Tsalko    schedule 22.05.2013    source источник


Ответы (1)


Проблема устранена в Spring v4.0.0.M2!

person Oleg Tsal-Tsalko    schedule 12.11.2013