2015-06-25 2 views
-1

В настоящее время я разрабатываю приложение с использованием Spring Data Neo4j. Это первый раз, когда я использую Spring framework.Весна автопогрузчик не работает

Однако аннотации с автоподдержкой не работают, я всегда получаю null. Вот коды:

public class CreateDiaryTransaction extends Transaction { 
    @Autowired 
    DirayRepository repository; 

    @Override 
    public Object perform(Map<String, Object> parameters) { 
     // TODO Auto-generated method stub 
     Diary diary = (Diary) DiaryFactory.getInstance().create(parameters); 
     repository.save(diary); 
     return diary.toJsonRepre(); 
    } 
} 

Тогда я протестировать его в модульном тесте:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "/applicationContext.xml" }) 
public class CreateDiaryTransactionTest { 

    @Test 
    public void test() { 
     Transaction transaction = new CreateDiaryTransaction(); 
     Map<String, Object> parameters = new HashMap<>(); 
     parameters.put("title", "Test"); 
     parameters.put("weather", "sun"); 
     parameters.put("mood", "happy"); 
     parameters.put("html", "<a href=\"javascript:void(0)\">link</a>"); 
     parameters.put("images", new ArrayList<Image>()); 
     try { 
      transaction.execute(parameters); 
     } catch (Exception e) { 
      fail("Exception occur"); 
     } 
    } 
} 

Когда я это работает, я получил нулевое исключение объекта. Однако, когда я размещаю репозиторий непосредственно в модульном тесте, он отлично работает. Вот еще один тест, который работает:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "/applicationContext.xml" }) 
public class DiaryRepositoryTest { 
    @Autowired 
    DirayRepository repository; 

    @Test 
    @Transactional 
    public void testSaveDiary() { 
     Diary diary = (Diary) DiaryFactory.getInstance().create(
       new HashMap<String, Object>()); 
     repository.save(diary); 

     Diary retrivedDiary = repository.findOne(diary.getGraphId()); 
     assertEquals(diary, retrivedDiary); 
    } 

} 

И вот мой контекст приложения:

<context:annotation-config /> 
<neo4j:config storeDirectory="target/data/pamela" 
    base-package="com.bond.pamela.domain" /> 
<neo4j:repositories base-package="com.bond.pamela.persistence" /> 
<tx:annotation-driven mode="aspectj" /> 

<bean id="conversionService" 
    class="org.springframework.context.support.ConversionServiceFactoryBean"> 
    <property name="converters"> 
     <set> 
      <bean 
       class="com.bond.pamela.domain.valueObject.converter.ImageToJsonConverter" /> 
      <bean 
       class="com.bond.pamela.domain.valueObject.converter.JsonToImageConverter" /> 
     </set> 
    </property> 
</bean> 

Я предполагаю, что я каким-то образом поместить в хранилище вне контекста родниковой, но как я могу получить его wirte? Thx

ответ

1

Вам нужно следующее в вашем контексте приложения

<context:component-scan base-package="packagename.package" /> 

Здесь имя пакета пакет, в котором у вас есть все классы с аннотациями.

Посмотрите на этот пост для более:

Spring MVC: Difference between context:annotation-config vs context:component-scan

+0

Вам также нужно добавить «@Repository» или «@Component» в верхней части класса .... Благодаря @sarvesh – swapyonubuntu

+0

он работает! thx человек. Я в аннотации @Component к транзакциям, в которых я нуждаюсь, и использую для регистрации их, чтобы Spring рассматривал его как Spring bean. Однако у меня есть еще один вопрос. У меня также есть другой пакет, содержащий компонент, поэтому как я могу их зарегистрировать? Добавьте еще один . –

+0

<контекст: компонент сканирования базового пакет = «xyzservice, xyzcontroller» /> ИЛИ \t \t <контекст: компонент сканирования базового пакет = "хуг /> будет принимать все пакеты под А ... .. Я бы порекомендовал второй подход ... – swapyonubuntu

0

Убедитесь, что вы написали @Repository или @Component аннотацию о выполнении DirayRepository и вы написали компонент сканирование в applicationContext.xml

образец кода для DirayRepository

@Repository 
    public class DirayRepositoryImpl implements DirayRepository { 
    void save() { ...} 

    } 
Смежные вопросы