我正在尝试了解春季数据solr展示项目。
https://github.com/christophstrobl/spring-data-solr-showcase
花了相当多的时间,我找不到产品存储库是如何实现和注入的 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;
}
产品存储库被定义为接口(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);
}
以下是 spring 上下文的配置方式:https://github.com/christophstrobl/spring-data-solr-showcase/blob/master/src/main/java/org/springframework/data/solr/showcase/Application.java
如果有人能指出我实现和注入此接口的方向,那就太好了。
该展示利用了 Spring 数据存储库抽象,使用从方法名称派生的查询。因此,Spring Data和Solr模块提供的基础架构负责为您创建所需的实现。请查看参考文档以获取更详细的说明。
展示本身的构建方式允许您通过查看从一个步骤过渡到另一个步骤的差异来逐步完成开发的多个阶段。因此,查看步骤 2 显示了如何使用自定义存储库实现,而步骤 4 则演示了如何使用 @Highlight
启用突出显示。
Spring Data 的目标是减少样板编码的数量(减少代码重复的手段(。
对于像 save 这样的基本方法,find 实现将由 spring 提供,Spring 将为这些接口创建 bean(Objetcs(。
为了告诉春天这些是我在这个包中的存储库,我们正在为 JPA 存储库编写@EnableJpaRepositories(basePackeges="com.spring.repositories")
或<jpa:repositories base-package="com.acme.repositories"/>
Foring solr repositores我们必须@EnableSolrRepositories(basePackages="com.spring.repositories"
或者<solr:repositories base-package="com.acme.repositories" />
Spring 将为这些接口创建 objetcs,我们可以使用@Autowire
注释注入这些接口 objetcs。
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/。
尝试阅读这个简单的文档,您可以获得更多有关弹簧数据的知识。