无法在春季BO中注入DAO类



我无法在Spring MVC中注入我的DAO类:这是我的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 是空的。以下是我的调度程序Servlet配置文件中的相关行:

<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. 类所在的包与扫描批注的包不同。将软件包添加到要扫描的base-packages列表中!

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

最新更新