尝试对其进行操作时获取 @autowired 实例 null,抛出空指针异常
getting @autowired intance null when try trying to do operation on it,throwing null pointer exception
我正在尝试使用 crud 存储库在 gemfire 上保存数据。我已经创建了一个操作 class 来调用存储库的保存方法,但是在自动装配实例中我得到空指针异常。下面是我的代码:
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
}
}
因此,从您的示例中不明显的是您如何 "bootstrap" 您的应用程序及其功能(例如 Repositories)付诸行动。
添加Spring@Configuration
,SpringBoot的不够简单@EnableAutoConfiguration
和 SD GemFire 的 @EnableGemfireRepositories
注释,并期望所有内容都能自动配置并成功连接。 IE。你需要一个 bootstrapping 机制,比如 Spring Boot,尤其是当你使用 @EnableAutoConfiguration
注释时。
例如...
import org.springframework.boot.SpringApplication;
...
class MyApplication {
public static void main(String[] args) {
SpringApplication.run(Operations.class, args);
}
}
现在,您可以从 Operations
class 中删除 @EnableAutoConfiguration
并将 @SpringBootApplication
添加到 MyApplication
class,例如所以...
@SpringBootApplication
class MyApplication {
...
}
@SpringBootAppliation结合Spring的@Configuration
和Spring的 @EnableAutoConfiguration
,以及许多其他有用的元注释,如 Spring 的 @ComponentScan
,使各种魔法得以发生。
但是,如果您不使用 Spring Boot,您可以随时 bootstrap 使用 AnnotationConfigApplicationContext
应用程序,就像这样。 .
class MyApplication
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext(Operations.class);
applicationContext.registerShutdownHook();
}
}
这基本上就是 Spring Boot、SpringApplication
class 为您所做的。
如果您正在开发 Web 应用程序,那么您当然可以指定创建的 ApplicationContext
的类型,因为您正在使用 Java 配置,例如。有关详细信息,请参阅 here。
希望对您有所帮助!
干杯,
约翰
当我们 @Autowired
任何 class 确定时,您已将 class 声明为 @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
对您的 class 进行操作 class
其中 class 您正在调用您的 saveKeyValueData()
方法。
我正在尝试使用 crud 存储库在 gemfire 上保存数据。我已经创建了一个操作 class 来调用存储库的保存方法,但是在自动装配实例中我得到空指针异常。下面是我的代码:
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
}
}
因此,从您的示例中不明显的是您如何 "bootstrap" 您的应用程序及其功能(例如 Repositories)付诸行动。
添加Spring@Configuration
,SpringBoot的不够简单@EnableAutoConfiguration
和 SD GemFire 的 @EnableGemfireRepositories
注释,并期望所有内容都能自动配置并成功连接。 IE。你需要一个 bootstrapping 机制,比如 Spring Boot,尤其是当你使用 @EnableAutoConfiguration
注释时。
例如...
import org.springframework.boot.SpringApplication;
...
class MyApplication {
public static void main(String[] args) {
SpringApplication.run(Operations.class, args);
}
}
现在,您可以从 Operations
class 中删除 @EnableAutoConfiguration
并将 @SpringBootApplication
添加到 MyApplication
class,例如所以...
@SpringBootApplication
class MyApplication {
...
}
@SpringBootAppliation结合Spring的@Configuration
和Spring的 @EnableAutoConfiguration
,以及许多其他有用的元注释,如 Spring 的 @ComponentScan
,使各种魔法得以发生。
但是,如果您不使用 Spring Boot,您可以随时 bootstrap 使用 AnnotationConfigApplicationContext
应用程序,就像这样。 .
class MyApplication
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext =
new AnnotationConfigApplicationContext(Operations.class);
applicationContext.registerShutdownHook();
}
}
这基本上就是 Spring Boot、SpringApplication
class 为您所做的。
如果您正在开发 Web 应用程序,那么您当然可以指定创建的 ApplicationContext
的类型,因为您正在使用 Java 配置,例如。有关详细信息,请参阅 here。
希望对您有所帮助!
干杯, 约翰
当我们 @Autowired
任何 class 确定时,您已将 class 声明为 @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
对您的 class 进行操作 class
其中 class 您正在调用您的 saveKeyValueData()
方法。