如何在不同的类中使用Spring Bean

时间:2014-07-29 12:57:19

标签: java spring jdbc

当我尝试通过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)

8System.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>

2 个答案:

答案 0 :(得分:1)

如果封闭类本身就是一个Spring托管bean,那么Spring只能填充注入/自动装配的资源。

你必须:

  • 使用@Service
  • 注释SomeOtherClass
  • 通过ctx.getBean(SomeOtherClass.class).printDb();
  • 从春季上下文中获取该类

答案 1 :(得分:0)

你的SomeOtherClass也是春豆吗?它必须是你注入资源。