我有一个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注释缺乏了解,因此无法实现这一点。
有人可以给我一些建议。
感谢
答案 0 :(得分:1)
您需要为此管理ImportHistoryRowMapper弹簧才能工作 我相信你的dao类引用这个mapper类是singleton。对于每个请求(即调用方法getJdbcTemplate()。query(sql,对象数组,ImportHistoryRowMapper的新实例);),您需要创建ImportHistoryRowMapper的新实例,即它应该是原型。 您可以通过两种方式将原型bean注入单例:
1)Lookup Method injection
2)Scoped proxies
看看this。