[英]Spring Framework Autowired Null Pointer Exception
我正在学习Spring,但是在尝试建立一个相对基本的Spring项目时遇到了一些问题。 我正在创建一个应用程序以简单地从数据库中读取数据,但是我在自动装配方面遇到问题,或者缺少该问题。 我的GetCustomerEvent
类在GetCustomers()
方法中GetCustomers()
了空指针异常,因为尚未初始化CustomerService
变量。 有人可以在这里指出正确的方向吗?
应用程序类
package org.ben.test.main;
@Configuration
@ComponentScan(basePackages={"org.ben.test.persistence", "org.ben.test.main"})
public class Application {
@Bean
public CustomerService customerService() {
return new CustomerService();
}
@Bean
public DataSource getDataSource() {
DriverManagerDataSource dmds = new DriverManagerDataSource();
dmds.setDriverClassName("org.postgresql.Driver");
dmds.setUrl("jdbc:postgresql://localhost:5432/Customers");
dmds.setUsername("postgres");
dmds.setPassword("postgres");
return dmds;
}
@Bean
public JdbcTemplate jdbcTemplate() {
DataSource ds = getDataSource();
JdbcTemplate jdbc = new JdbcTemplate(ds);
return jdbc;
}
public static void main(String[] args) {
GetCustomerEvent ev = new GetCustomerEvent();
ev.GetCustomers();
}
}
CustomerService.class
package org.ben.test.persistence;
@Component
public class CustomerService {
@Autowired JdbcTemplate jdbcTemplate;
public CustomerService() {
}
public void getCustomers() {
jdbcTemplate.query("SELECT * FROM Customers", new RowMapper() {
@Override
public Object mapRow(ResultSet arg0, int arg1) throws SQLException {
System.out.println(arg0.getString("firstName"));
return null;
}
});
}
}
GetCustomerEvent.class
package org.ben.test.persistence;
@Component
public class GetCustomerEvent {
@Autowired
CustomerService customerService;
public GetCustomerEvent() {
}
public void GetCustomers() {
customerService.getCustomers();
}
}
问题在于下面的线
GetCustomerEvent ev = new GetCustomerEvent();
您使用“新”手动创建了实例。 Spring没有关于此对象的想法。 请参阅为什么我的Spring @Autowired字段为空? 有关详细信息。
您没有初始化Spring容器。
您需要创建上下文以使其起作用。
无论使用的是xml还是基于注释的配置,都需要创建应用程序上下文。 如果您的应用程序是Web应用程序,请参阅这篇文章在Spring中使用web.xml加载上下文以加载应用程序上下文
一旦有了应用程序,就可以使用context.getBean()
方法获取bean。
而且,spring容器不管理使用new运算符创建的对象。 在您的示例中,您需要自动连接GetCustomerEvent bean
@Autowired GetCustomerEvent getCustomerEvent;
//and call
getCustomerEvent.getCustomers();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.