Java 弹簧自动接线无法工作

Java 弹簧自动接线无法工作,java,spring,spring-data,Java,Spring,Spring Data,我目前正在使用SpringDataNeo4j开发一个应用程序。这是我第一次使用Spring框架 但是,自动连线注释不起作用,我总是得到null。代码如下: public class CreateDiaryTransaction extends Transaction { @Autowired DirayRepository repository; @Override public Object perform(Map<String, Object&

我目前正在使用SpringDataNeo4j开发一个应用程序。这是我第一次使用Spring框架

但是,自动连线注释不起作用,我总是得到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();
    }
}
公共类CreateDiaryTransaction扩展事务{
@自动连线
DirayRepository;
@凌驾
公共对象执行(映射参数){
//TODO自动生成的方法存根
日记=(日记)日记工厂.getInstance().create(参数);
保存(日记);
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”})
公共类CreateDiaryTransactionTest{
@试验
公开无效测试(){
事务处理=新建CreateDiaryTransaction();
映射参数=新的HashMap();
参数。放置(“标题”、“测试”);
参数。put(“天气”、“太阳”);
参数。放置(“心情”、“快乐”);
参数。put(“html”,”);
parameters.put(“images”,newarraylist());
试一试{
事务执行(参数);
}捕获(例外e){
失败(“发生异常”);
}
}
}
当我运行这个时,我得到了null对象异常。但是,当我将存储库直接放在单元测试中时,它可以正常工作。下面是另一个有效的测试:

@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);
    }

}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({“/applicationContext.xml”})
公共类日志存储测试{
@自动连线
DirayRepository;
@试验
@交易的
public void testSaveDiary(){
日记=(日记)日记工厂。getInstance().create(
新HashMap());
保存(日记);
日记检索日记=repository.findOne(Diary.getGraphId());
资产质量(日记、检索日记);
}
}
下面是我的应用程序上下文:

<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>


我想我不知何故把存储库放在了spring上下文之外,但是我怎样才能把它放到wirte中呢?Thx

您需要在应用程序上下文中执行以下操作

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

这里的包名是一个包,其中包含所有带有注释的类

有关更多信息,请查看此帖子:


确保您已经在
DirayRepository
的实现上编写了
@Repository
@Component
注释,并且已经在中编写了组件扫描
applicationContext.xml

DirayRepository的示例代码

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

  }

您还需要在类的顶部添加“@Repository”或“@Component…”。。。。感谢@sarveshit works!thx人。我在@Component注释中找到了我需要的事务,并使用它来注册它们,以便Spring将其视为Springbean。不过,我还有一个问题。我还有另一个包含组件的包,所以如何注册它们呢?再加一个。或者谢谢你,伙计!如果问题解决了,您可以将其标记为正确答案