1

我正在尝试了解 spring data solr 展示项目。

https://github.com/christophstrobl/spring-data-solr-showcase

在花了相当多的时间之后,我找不到 productRepository 是如何实现注入https://github.com/christophstrobl/spring-data-solr-showcase/blob/master/src/main/java/org/ springframework/data/solr/showcase/product/ProductServiceImpl.java

@Service class ProductServiceImpl implements ProductService { 
private static final Pattern IGNORED_CHARS_PATTERN = Pattern.compile("\\p{Punct}"); 
private ProductRepository productRepository;


@Autowired
public void setProductRepository(ProductRepository productRepository) {
    this.productRepository = productRepository;
}

ProductRepository 被定义为接口(https://github.com/christophstrobl/spring-data-solr-showcase/blob/master/src/main/java/org/springframework/data/solr/showcase/product/ProductRepository.java ) 我没有找到任何实现这个接口的代码

interface ProductRepository extends SolrCrudRepository<Product, String> {

    @Highlight(prefix = "<b>", postfix = "</b>")
    @Query(fields = { SearchableProductDefinition.ID_FIELD_NAME, 
                      SearchableProductDefinition.NAME_FIELD_NAME,
                      SearchableProductDefinition.PRICE_FIELD_NAME, 
                      SearchableProductDefinition.FEATURES_FIELD_NAME,
                      SearchableProductDefinition.AVAILABLE_FIELD_NAME }, 
           defaultOperator = Operator.AND)
    HighlightPage<Product> findByNameIn(Collection<String> names, Pageable page);

    @Facet(fields = { SearchableProductDefinition.NAME_FIELD_NAME })
    FacetPage<Product> findByNameStartsWith(Collection<String> nameFragments, Pageable pagebale);
}

下面是如何配置弹簧上下文: https ://github.com/christophstrobl/spring-data-solr-showcase/blob/master/src/main/java/org/springframework/data/solr/showcase/Application.java

如果有人能指出这个接口的实现和注入方向,那就太好了。

4

2 回答 2

2

该展示使用 Spring Data 存储库抽象,使用方法名称的查询派生。因此Spring Data和 Solr 模块提供的基础设施负责为您创建所需的实现。请查看参考文档以获得更详细的说明。

展示柜本身的构建方式允许您通过查看从一个步骤过渡到另一个步骤的差异来逐步完成多个开发阶段。因此,看一下第 2 步展示了如何使用自定义存储库实现,而第 4 步演示了如何使用@Highlight.

于 2014-12-05T08:36:24.967 回答
0

Spring Data 的目标是减少样板代码的数量(意味着减少代码的重复)。
对于保存等基本方法,找到spring提供的实现,spring将为这些接口创建bean(Objetcs)。
为了告诉 spring 这些是我在这个包中的存储库,我们正在编写@EnableJpaRepositories(basePackeges="com.spring.repositories")<jpa:repositories base-package="com.acme.repositories"/>为 JPA 存储库
Foring solr 存储库,我们必须编写@EnableSolrRepositories(basePackages="com.spring.repositories"或者<solr:repositories base-package="com.acme.repositories" />Spring 将为这些接口创建 objetc,我们可以使用@Autowire注解注入这些接口 objetc。

Example:
 @Service
 Pulic class SomeService{
     @Autowire
     private SampleRepository;

     /*  @postConstruct annotation is used to execute method just after creating bean 
          and injecting all dependencies by spring*/
     @PostConstruct
     public void postConstruct(){
          System.out.println("SampleRepository implementation class name"+ SampleRepository.getClass());
     }
 }

上面的例子是看SampleRepository接口的实现类(这个类不是用户定义的,是spring给的类)。
参考文档链接http://docs.spring.io/spring-data/solr/docs/2.0.2.RELEASE/reference/html/
尝试阅读这个简单的文档,您可以获得更多关于 spring-data 的知识。

于 2016-06-25T09:02:55.730 回答