Konstantin Milyutin
Konstantin Milyutin

Reputation: 12366

Creating a repository instance in Spring Data

I'm new to Spring Data and to Spring in general, so don't be hard on me.

I can't find a way to instantiate a repository. I read the documentation:

http://docs.spring.io/spring-data/data-solr/docs/1.0.0.RC1/reference/htmlsingle/#repositories.create-instances

It describes different ways of declaring repositories (xml, filters, etc), but doesn't say how I can get an instance of it in my code.

Here is my configuration xml file:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:solr="http://www.springframework.org/schema/data/solr"
       xsi:schemaLocation="http://www.springframework.org/schema/data/solr http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <solr:repositories base-package="spring" />
    <solr:solr-server id="solrServer" url="http://localhost:8983/solr" />

    <bean id="taskRepo" class="spring.SolrTaskRepository">
    </bean>

    <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg index="0" ref="solrServer"/>
    </bean>
</beans>

And SolrTaskRepository:

public interface SolrTaskRepository<T, ID extends Serializable> extends SolrCrudRepository<T, ID> {
    Page<T> findByOrigin(String origin, Pageable page);
}

Could someone help me out?

Upvotes: 1

Views: 4422

Answers (1)

Evgeni Dimitrov
Evgeni Dimitrov

Reputation: 22506

If you want to use the repo(or any spring bean) somewhere out of the context:

ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

MyRepo obj = (MyRepo) context.getBean("myRepo");

If you use the repo in some other bean managed by spring(some service) you can autowire it

@Autowire
private MyRepo myRepo;// + setter

or inject it in the context:

<bean id="someService" class="com.org.core.SomeService">
        <property name="myRepo" ref="myRepo" />
</bean>

For both ways you need the bean defined in the context:

 <bean id="myRepo" class="com.org.core.MyRepo">
 </bean>

Example context file:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="myRepo" class="com.org.core.MyRepo">
     </bean>

</beans>

IF you load the context with ClassPathXmlApplicationContext you need the file in the classpath.

Upvotes: 1

Related Questions