В настоящее время я разрабатываю приложение с использованием 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
Вам также нужно добавить «@Repository» или «@Component» в верхней части класса .... Благодаря @sarvesh – swapyonubuntu
он работает! thx человек. Я в аннотации @Component к транзакциям, в которых я нуждаюсь, и использую для регистрации их, чтобы Spring рассматривал его как Spring bean. Однако у меня есть еще один вопрос. У меня также есть другой пакет, содержащий компонент, поэтому как я могу их зарегистрировать? Добавьте еще один . –
<контекст: компонент сканирования базового пакет = «xyzservice, xyzcontroller» /> ИЛИ \t \t <контекст: компонент сканирования базового пакет = "хуг /> будет принимать все пакеты под А ... .. Я бы порекомендовал второй подход ... – swapyonubuntu