自动装配时,JDBCTemplate为null

时间:2016-08-18 09:01:28

标签: java spring spring-mvc nullpointerexception

我知道之前已经多次询问过,但典型的答案是如果用new创建对象,那么Spring不知道它,因此无法进行注入。在这种情况下,我无法理解为什么会出现这种情况,因为我在Spring中实例化我的类,但我对JDBCTemplate的调用是null。

我在这里犯了什么明显的错误?

public class UserDAOImpl implements UserDAO
{
    @Autowired
    private JdbcTemplate template;

    @Autowired
    private PlatformTransactionManager manager;

    @Override
    public List<User> getUsers()
    {
        List<User> users = template.query("SELECT * FROM USER", new UserRowMapper());
        return users;
    }

    @Override
    public boolean addUser(User user)
    {
        if (user == null)
        {
            throw new IllegalArgumentException("Unable to add null user");
        }

        return true;
    }

}


<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
        <property name="url"
            value="jdbc:jtds:sqlserver://...;integrated security=false" />
        <property name="username" value="..." />
        <property name="password" value="..." />
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="txManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean class="com.rest.dao.UserDAOImpl" />

2 个答案:

答案 0 :(得分:2)

您必须在bean定义中添加对JdbcTemplate的引用,或者在XML配置中添加标记<context:annotation-config/>以启用注释。

答案 1 :(得分:0)

添加

<context:annotation-config/> 

应该有帮助。