2016-02-02 78 views
0

我无法注入在Spring MVC我DAO类: 这是我的DAO类:无法注入春天BO DAO类

package com.pankaj.bookslibrary.dao; 

@Component 
public class BooksLibraryDAO 
{ 
    @PersistenceContext 
    private EntityManager em; 

    public void saveBook(Book book) 
    { 
     em.persist(book); 
    } 
} 

这是我的BO类调用DAO:

package com.pankaj.bookslibrary.controller; 

@Service 
public class BooksLibraryBO 
{ 
    @Autowired 
    private BooksLibraryDAO booksLibraryDAO; 

    public void saveBook(Book book) 
    { 
     booksLibraryDAO.saveBook(book); 
    } 

以上代码行为NullPointerException,因为booksLibraryDAO为null。 下面是我的DispatcherServlet配置文件中的相关行:

<beans xmlns=...3.0.xsd"> 

    <context:component-scan base-package="com.pankaj.bookslibrary" /> 
    <context:annotation-config/> 

    <bean id="dataSource"....</bean> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /> 
     <property name="persistenceUnitName" value="BooksLibrary_PersistenceUnit" /> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
       <property name="showSql" value="false" /> 
       <property name="generateDdl" value="true" /> 
      </bean> 
     </property> 
    </bean> 


    <bean id="transactionManagerNonJTA" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
     <property name="defaultTimeout" value="1800"></property> 
    </bean> 
    <tx:annotation-driven transaction-manager="transactionManagerNonJTA" /> 

我不知道我错过了。 这是我如何从控制器拨打电话:

BooksLibraryBO bo = new BooksLibraryBO(); 
bo.saveBook(book); 
+1

您正在创建一个新的实例,不要这样做,在控制器中注入BO。 –

+0

感谢M. Deinum。这工作。 –

回答

1
  1. 的包中的类是从您扫描标注的包装不同。将软件包添加到base-packages的列表中以扫描!

  2. 正如M.Deinum解释的那样,您自己创建BooksLibraryBO,spring不知道那些实例,也不会处理注释。