具有自定义实体

时间:2015-04-27 09:23:56

标签: java spring redis spring-boot

在我的SpringBoot项目中,当我使用以下内容注入RedisTemplate时,没关系。

@Repository
public class CommonDBDaoImpl implements CommonDBDao {
    @Autowired
    RedisTemplate<String, Object> redisTemplate;

    ....
}

但是,当我使用自定义RedisTemplate的{​​{1}}时,注入失败了..

Entity/DTO

记录:

@Repository
public class CommonDBDaoImpl implements CommonDBDao {
    @Autowired
    RedisTemplate<String, PersonDTO> redisTemplate;

    ....
}

public PersonDTO implements Serializable {
    //field
    //getter and setter
}

如何在Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'commonDBDaoImpl': Injection of autowired dependenci es failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.data.red is.core.RedisTemplate com.java.my.dao.CommonDBDaoImpl.redisTemplate; nested exception is org.springframework.beans.factory.NoSuchBeanDe finitionException: No qualifying bean of type [org.springframework.data.redis.core.RedisTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.j ava:334) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1210) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) at org.springframework.boot.SpringApplication.run(SpringApplication.java:320) at org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:101) at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:68) at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86) ... 25 more Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.data.redis.core.RedisTemplat e com.java.my.dao.CommonDBDaoImpl.redisTemplate; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: N o qualifying bean of type [org.springframework.data.redis.core.RedisTemplate] found for dependency: expected at least 1 bean which qualifies as autowi re candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcesso r.java:561) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.j ava:331) ... 40 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.data.redis.core.RedisTempl ate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springfra mework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcesso r.java:533) ... 42 more 中使用自定义Entity/DTO

1 个答案:

答案 0 :(得分:3)

RedisTemplate<String, PersonDTO> redisTemplateRedisTemplate<String, Object> redisTemplate是两个不同的签名然后spring找不到第一个bean,你必须手动定义一个新的bean。

你可以这样做:

    @Bean
    public RedisTemplate<String, PersonDTO> redisTemplatePersonDTO() {
        return new RedisTemplate<String, PersonDTO>() { 
            /* the declaration of the object here */ 
        };
    }

将此代码放在ApplicationConfig类中,并确保使用@EnableAutoConfiguration@Configuration

对其进行处理