我在创建用于依赖注入的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依赖注入建议一个修复/解决方法吗?
答案 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>
在场景后面创建了对象无法实现的对象。