我正在尝试使用crud存储库保存gemfire上的数据。我创建了一个操作类来调用存储库的save方法但是在自动装配的实例中我得到空指针异常。以下是我的代码:
public interface GeodeRepository extends CrudRepository<KeyValueBean, String> {
@Override
public KeyValueBean findOne(String name);
@Override
public <S extends KeyValueBean> Iterable<S> save(Iterable<S> entities);
}
@EnableGemfireRepositories(basePackageClasses = GeodeRepository.class)
@EnableAutoConfiguration
@Configuration
public class Operations {
@Autowired
private GeodeRepository repository;
public void saveKeyValueData(KeyValueBean keyValueBean) {
System.out.println("Repository is : " + repository);
repository.save(Arrays.asList(keyValueBean)); // <--- i am getting
// repository as null so
// getting null pointer
// exception
}
}
答案 0 :(得分:2)
当我们@Autowired
任何类确定时,您已将该类声明为@Component
。
例如:
@Component
public class Operations {
@Autowired
private GeodeRepository repository;
public void saveKeyValueData(KeyValueBean keyValueBean) {
System.out.println("Repository is : " + repository);
repository.save(Arrays.asList(keyValueBean));
}
}
并尝试将@Autowired
与Operation类一起使用到您的班级
您在哪个班级调用saveKeyValueData()
方法。
答案 1 :(得分:1)
因此,您的示例中不明显的是您如何“引导”您的应用程序及其功能(例如存储库)。
添加 Spring @Configuration
, Spring Boot的 @EnableAutoConfiguration
和SD GemFire的@EnableGemfireRepositories
注释并期望是不够的一切都要自动配置并成功连线。即你需要一个引导机制,比如 Spring Boot ,特别是如果你使用的是@EnableAutoConfiguration
注释。
例如......
import org.springframework.boot.SpringApplication;
...
class MyApplication {
public static void main(String[] args) {
SpringApplication.run(Operations.class, args);
}
}
现在,您可以从@EnableAutoConfiguration
课程中删除Operations
,然后将@SpringBootApplication
添加到MyApplication
课程,就像这样......
@SpringBootApplication
class MyApplication {
...
}
@SpringBootAppliation将 Spring的 @Configuration
与 Spring Boot的 @EnableAutoConfiguration
结合在一起,以及许多其他有用的元注释,例如< em> Spring的 @ComponentScan
,可以实现各种魔法。
但是,如果您没有使用 Spring Boot ,您可以随时使用AnnotationConfigApplicationContext
引导应用程序,就像这样......
class MyApplication
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext(Operations.class);
applicationContext.registerShutdownHook();
}
}
这基本上是 Spring Boot ,SpringApplication
类为你做的。
如果您正在开发Web应用程序,那么当然您可以指定自从使用Java配置以来创建的ApplicationContext
类型。有关详细信息,请参阅here。
希望这有帮助!
干杯, 约翰