bean的实例化失败:指定的类是接口

时间:2015-06-12 05:02:38

标签: spring mongodb javabeans

我在创建用于依赖注入的bean时面临一个问题。这是场景。

我正在处理MongoDB存储库,我还创建了一个使用它的类。我试图实例化两者的bean实例。

MongoDB reporsitory:

@Repository
public interface ProductGlobalTrendRepository extends MongoRepository<ProductGlobalTrend,String>{
    public ProductGlobalTrend findByPid(@Param("pId") String pId);
}

正在使用它的类:

@Service
@Scope("singleton")
public class ProductTrendService {

    @Autowired
    @Qualifier("productGlobalTrendRepo")
    ProductGlobalTrendRepository productGlobalTrendRepo;

    public ProductTrendService() {
        super();
    }   

    public void setProductGlobalTrendRepo(
            ProductGlobalTrendRepository productGlobalTrendRepo) {
        this.productGlobalTrendRepo = productGlobalTrendRepo;
    }

    public ProductTrendService(ProductGlobalTrendRepository productGlobalTrendRepo) {
        super();
        this.productGlobalTrendRepo = productGlobalTrendRepo;
    }
}   

spring的bean配置xml包含以下条目:

<bean id="productTrendService" class="com.api.services.ProductTrendService"> </bean>
<bean id="productGlobalTrendRepo" class="com.mongodb.repository.ProductGlobalTrendRepository"> </bean>

以下是我得到的错误:

  

19428 [localhost-startStop-1]警告   org.springframework.web.context.support.AnnotationConfigWebApplicationContext    - 上下文初始化期间遇到异常 - 取消刷新尝试   org.springframework.beans.factory.BeanCreationException:错误   使用名称&#39; productTrendService创建bean&#39 ;:注入自动装配   依赖失败;嵌套异常是   org.springframework.beans.factory.BeanCreationException:不能   autowire字段:com.mongodb.repository.ProductGlobalTrendRepository   com.api.services.ProductTrendService.productGlobalTrendRepo;嵌套   异常是org.springframework.beans.factory.BeanCreationException:   创建名称为&#39; productGlobalTrendRepo&#39;的bean时出错定义于   类路径资源[com / vstore / conf / spring-security.xml]:   bean的实例化失败;嵌套异常是   org.springframework.beans.BeanInstantiationException:失败   实例化[com.mongodb.repository.ProductGlobalTrendRepository]:   指定的类是一个接口

它抱怨存储库是一个接口类。

有人可以为这个bean依赖注入建议一个修复/解决方法吗?

1 个答案:

答案 0 :(得分:3)

问题在于您的上下文文件中的以下信息

 <bean id="productGlobalTrendRepo"  
        class="com.mongodb.repository.ProductGlobalTrendRepository"> 
 </bean>

您应该创建一个com.mongodb.repository.ProductGlobalTrendRepositoryImpl类,它实现com.mongodb.repository.ProductGlobalTrendRepository并提供其方法的实现。

然后将您的bean声明信息更改为

  <bean id="productGlobalTrendRepo"   
     class="com.mongodb.repository.ProductGlobalTrendRepositoryImpl">    
  </bean>

在场景后面创建了对象无法实现的对象。