【问题标题】:Spring JPA with ApplicationContext.xml, DAO and Service are NULL带有 ApplicationContext.xml、DAO 和 Service 的 Spring JPA 为 NULL
【发布时间】:2012-01-05 08:55:02
【问题描述】:

我遇到了这个问题。所有的 DAO 和服务都是空的,我不知道如何解决这个问题:(

这是 web.xml 中的配置部分

...
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml
     </param-value>
</context-param>
...

在 applicationContext.xml 中

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

<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<bean
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>/WEB-INF/classes/tipytut.properties</value>
    </property>
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="database" value="MYSQL" />
            <property name="showSql" value="true" />
        </bean>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

我有一个这样的 DAO:

@Repository("tagDAO")
@Transactional
public class TagDAOImpl extends JpaDAO implements TagDAO {
    public List<Tag> getTags() {
        return getList("SELECT t FROM Tag t");
    }
}

...和服务

@Service("managementService")
@Transactional
public class ManagementServiceImpl implements ManagementService {
    @Autowired
    private TagDAO tagDAO;

    public List<Tag> getTags() {
        return tagDAO.getTags();
    }
}

当我在 Controller 中调用该服务时,它始终为 NULL

@Autowired
private ManagementService managementService;

public List<Tag> getTags() {
    try {
        managementService.getTags();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return tags;
}

任何帮助将不胜感激。

更新: 我上传了我的项目HERE(只是开头的部分,很简单),大家可以看看。希望有人能弄清楚这有什么问题。 :(

【问题讨论】:

    标签: java spring jpa maven applicationcontext


    【解决方案1】:

    请检查这些 service/Dao 是否在包 com.tipytut 中。 context:annotation-config 在组件扫描中自动启用。您的控制器是用 @Controller 注释还是通过 @Component 制作了一个组件?否则它不会被检测到并且不会是 Spring bean,除非你手动连接它。所以如果不是 Spring bean,自动装配将无法工作

    【讨论】:

    • +1 我还将添加信息,作者可以通过在 XML 中的显式声明以替代方式执行此操作。
    • imo 只需添加带有 service 和 dao 的包进行扫描。它应该工作
    • 是的,他们是。无论如何感谢您的帮助
    【解决方案2】:

    我忘了更新我的问题,终于弄明白了!我忘了为struts2-spring-plugin添加依赖,问题是我没有收到关于这个X的错误消息-(

    希望这会对某人有所帮助^^

    【讨论】:

      【解决方案3】:

      使用@Resource 注释

      @Resource 
          private TagDAO tagDAO;
      

      在你的配置文件中

      使用@Controller 注释您的控制器并将@Resource 注释添加到您的服务中,也与DAO 相同。

      【讨论】:

        猜你喜欢
        • 2017-04-07
        • 1970-01-01
        • 2020-06-06
        • 2011-10-17
        • 2023-03-30
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 2023-02-09
        相关资源
        最近更新 更多