与Spring @Autowired的空指针

时间:2015-07-17 15:36:27

标签: spring hibernate pointers null autowired

我是Spring&的新手Hibernate和我花了几个星期试图掌握它。我的大多数经验都是Oracle开发的,所以这对我来说是一个偏离。 Hibernate正在运行,但Spring让我很头疼。

我尝试使用本教程,但使用的是Oracle数据库和我的地址表。

http://www.codejava.net/frameworks/spring/spring-4-and-hibernate-4-integration-tutorial-part-1-xml-configuration

网页没有工作所以我在HomeController.java上尝试了一个测试用例但是没有用,但是我相信我已经把它缩小到了addressDao中的空指针,所以我写了一个测试用例试着把它钉死。

java.lang.NullPointerException:null      springexp.unittest.AddressDaoTest.testListAddr(AddressDaoTest.java:29)

package springexp.unittest;

import bussys.model.Address;
import springexp.dao.AddressDao;
import java.util.List;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;

public class AddressDaoTest
{
  @Autowired
  private AddressDao addressDao;

  @RequestMapping(value="/")
  /**
   * @see springexp.dao.AddressDao#listAddr()
   */
  @Test
 public void testListAddr()
 {
    List<Address> listAddresses = addressDao.listAddr();  << error thrown here
    System.out.println(listAddresses.get(1).getFirstname());

    fail("Unimplemented");
  }
}

我也花了很长时间阅读stackoverflow和其他人尝试修复空指针问题,但似乎有很多方法来编写这个并且它已经在各种版本中发生了变化。

在servlet-context.xml中我有这个:

 <!-- Hibernate Session Factory -->
  <bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" />
      <property name="annotatedClasses">
        <list>
          <value>springexp.dao.AddressDao</value>
        </list>
      </property>
  </bean>

  <tx:annotation-driven />
  <bean id="transactionManager"
     class="org.springframework.orm.hibernate4.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
  </bean>

  <bean id="addressDao" class="springexp.dao.AddressDaoImpl">
      <constructor-arg>
          <ref bean="sessionFactory" />
      </constructor-arg>
  </bean>

  <!-- added this recently based on one suggestion -->
  <bean id="addressDaoTest" class="springexp.unittest.AddressDaoTest">
      <constructor-arg>
          <ref bean="sessionFactory" />
      </constructor-arg>
  </bean>

AddressDaoImpl.java

 package springexp.dao;
    import bussys.model.Address;
    import java.util.List;

    import org.hibernate.Criteria;
    import org.hibernate.SessionFactory;
    import org.springframework.transaction.annotation.Transactional;

    public class AddressDaoImpl
      implements AddressDao
    {
      private SessionFactory sessionFactory;

      public AddressDaoImpl(SessionFactory sessionFactory)

      {
        this.sessionFactory = sessionFactory;
      }

      @Override
      @Transactional
      public List<Address> listAddr()
      {
        @SuppressWarnings("unchecked")

        List<Address> listAddress = (List<Address>)
             sessionFactory.getCurrentSession().createCriteria(Address.class).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
        return listAddress;
      }
    }

我希望这足以说明我的错误。

0 个答案:

没有答案