Spring@EnableCaching和@Inject/@Autowired问题
在@Configuration class中将@EnableCaching注释与@Inject/@Autowired一起使用时,我发现了一个问题:Spring@EnableCaching和@Inject/@Autowired问题,spring,caching,autowired,inject,Spring,Caching,Autowired,Inject,在@Configuration class中将@EnableCaching注释与@Inject/@Autowired一起使用时,我发现了一个问题: @Configuration @EnableCaching public class CacheConfig { @Inject private DataSource dataSource; @Bean public CacheManager cacheManager(){ SimpleCacheM
@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();
}
}
}
复制的简单示例:
配置类:
@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.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:188)
在
org.springframework.beans.factory.support.ConstructorResolver.InstantiationUsingFactoryMethod(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.intercept(ConfigurationClassEnhancer.java:289)
在
spring.samples.config.CacheConfig$$enhancerbyglib$$f6ceccea.cacheManager()
位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
invoke(NativeMethodAccessorImpl.java:57)
在
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.lang.reflect.Method.invoke(Method.java:491)
org.springframework.beans.factory.support.SimpleInstallationStrategy.instantiate(SimpleInstallationStrategy.java:166)
... 还有77个
但是,如果您注释掉@Inject'ed字段或@EnableCaching注释,则将引导配置,不会出现错误
这对我来说就像一只虫子。是否有人面临同样的问题,或者我可能错过了smth
谢谢,
Oleg问题已在Spring v4.0.0.M2中修复强>