我正在尝试了解spring数据solr展示项目。
https://github.com/christophstrobl/spring-data-solr-showcase
中的实施和注入的产品库?@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);
}
以下是如何配置spring上下文: https://github.com/christophstrobl/spring-data-solr-showcase/blob/master/src/main/java/org/springframework/data/solr/showcase/Application.java
如果有人能指出我实施和注入此接口的方向,那就太棒了。
答案 0 :(得分:2)
展示使用方法名称中的查询派生来使用Spring Data存储库抽象。因此Spring Data和Solr模块提供的基础架构负责为您创建所需的实现。请查看Reference Documentation以获取更详细的说明。
展示本身的构建方式允许您通过查看从一个步骤转换到另一个步骤的差异来step through several stages of development。因此,查看Step 2会显示如何使用Custom Repository Implementation,而Step 4则会演示如何使用@Highlight
启用突出显示。
答案 1 :(得分:0)
Spring Data的目标是减少样板编码量(减少代码重复的方法)。
对于像save这样的基本方法,找到spring和spring将提供的实现将为这些接口创建bean(Objetcs)。
告诉spring这些是我在这个包中的存储库,我们正在写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/。
尝试阅读这个简单的文档,您可以获得更多关于spring-data的知识。