当我尝试通过SimpleJdbcDaoSupport
getJdbcTemplate()
打印出来自不同类别的数据库项目时遇到问题,在这种情况下为类SomeOtherClass
。
我的实现是这样的:
主要课程:
public class JdbcDemo {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
HibernateDaoImpl dao = ctx.getBean("hibernateDaoImpl", HibernateDaoImpl.class);
System.out.println(dao.getCircleCount());
new TestController().printDb();
}
}
其他一些课程SomeOtherClass
:
public class SomeOtherClass {
@Autowired
private SimpleJdbcDaoImpl simpleJdbcDaoImpl;
public void printDb() {
System.out.println(simpleJdbcDaoImpl.getCircleCount() + " : trial here.....");
}
}
班级System.out.println(dao.getCircleCount());
中的 JdbcDemo
工作正常,但new TestController().printDb();
中的SomeOtherClass
工作正常。为什么会这样?
堆栈跟踪:
8
Exception in thread "main" java.lang.NullPointerException
at com.rev.TestController.printDb(TestController.java:12)
at com.rev.JdbcDemo.main(JdbcDemo.java:17)
Java Result: 1
BUILD SUCCESSFUL (total time: 35 seconds)
8
是System.out.println(dao.getCircleCount());
我延伸SimpleJdbcDaoSupport
public class SimpleJdbcDaoImpl extends SimpleJdbcDaoSupport {
public int getCircleCount() {
String sql = "SELECT COUNT(*) FROM CIRCLE";
return this.getJdbcTemplate().queryForInt(sql);
}
}
我将非常感谢任何帮助。感谢。
更新:
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:D:\\WAKILI\\jdbcdemodb"/>
</bean>
<bean id="simpleJdbcDaoImpl" class="com.rev.dao.SimpleJdbcDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.rev.model" />
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.H2Dialect</prop>
</props>
</property>
</bean>
<context:annotation-config/>
<context:component-scan base-package="com.rev"/>
</beans>
答案 0 :(得分:1)
如果封闭类本身就是一个Spring托管bean,那么Spring只能填充注入/自动装配的资源。
你必须:
@Service
ctx.getBean(SomeOtherClass.class).printDb();
答案 1 :(得分:0)
你的SomeOtherClass也是春豆吗?它必须是你注入资源。