混合

时间:2014-04-15 02:29:08

标签: spring spring-mvc

我有一个spring mvc 3.0 Web应用程序,我正在使用转换服务,如下所示......

<bean id="applicationConversionService"
    class="com.myer.reporting.converter.ApplicationConversionServiceFactoryBean"/>

<context:component-scan base-package="com.myer.reporting.controller" />
<context:component-scan base-package="com.myer.reporting.manager" />
<context:component-scan base-package="com.myer.reporting.dao"/>
<context:component-scan base-package="com.myer.reporting.dao.mapper"/>

<mvc:annotation-driven conversion-service="applicationConversionService"/>  

在我使用转换服务的控制器中,一切正常。

    @Autowired
    private ApplicationConversionServiceFactoryBean applicationConversionService;   '

但是我第一次尝试使用相同的方法在mapper中使用applicationConversionService,但applicationConversionService总是返回null。

package com.myer.reporting.dao.mapper;

public class ImportHistoryRowMapper implements RowMapper<ImportHistory> {

    private static final String BUSINESS_DATE = "businessdate";
    private static final String TOTAL_TRAN_COUNT = "total_tran_count";

    @Autowired
    private ApplicationConversionServiceFactoryBean applicationConversionService;

    public ImportHistory mapRow(ResultSet rs, int rowNum) throws SQLException {
        Date businessDate = rs.getDate(BUSINESS_DATE);
        Integer totalTranCount = rs.getInt(TOTAL_TRAN_COUNT);

        ImportHistory importHistory = new ImportHistory();
        importHistory.setBusinessDate(businessDate);
        importHistory.setTransactionCount(totalTranCount);

        // status
        TrafficLightStatus status = 
                applicationConversionService.
                getImportThresholdToStatusConverter()
                .convert(totalTranCount);   
        importHistory.setStatus(status);
        return importHistory;
    }
}

我试图将@Component添加到班级的顶部,但这似乎也不起作用。我认为我对@Autowired注释缺乏了解,因此无法实现这一点。

有人可以给我一些建议。

感谢

1 个答案:

答案 0 :(得分:1)

您需要为此管理ImportHistoryRowMapper弹簧才能工作 我相信你的dao类引用这个mapper类是singleton。对于每个请求(即调用方法getJdbcTemplate()。query(sql,对象数组,ImportHistoryRowMapper的新实例);),您需要创建ImportHistoryRowMapper的新实例,即它应该是原型。 您可以通过两种方式将原型bean注入单例:

1)Lookup Method injection
2)Scoped proxies

看看this