今天被一个徐家汇商城的技术经理坑了一把;翻一下以前的代码,找找问题出在哪里了 ;
粗放的贴一下代码:
1.spring配置文件:这句画的意思是扫面以com.sand开头包中的所有有注解的类注入spring。(就是IOC意思,不要再手工的写)
<!-- spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
<context:component-scan base-package="com.sand"></context:component-scan>
@Component
@Path("/QSRentalAPI")
public class QsRentalAPI {
private final static Log logger = LogFactory.getLog(QsRentalAPI.class);
@Autowired
private OperationContext context;
@Path("QSRental")
@Produces({ MediaType.TEXT_PLAIN })
@POST
public String qsRental(@Context HttpServletRequest request) {
String response = "";
try {
String json = StrUtil.buildJsonString(request);
QSRentalInBean bean = (QSRentalInBean) JSONObject.toBean(
JSONObject.fromObject(json), QSRentalInBean.class);
context.setAttribute(QSRentalOperation.IN_BEAN, bean);
OPCaller.call(QSRentalOperation.ID, context);
response = (String) context
.getAttribute(QSRentalOperation.OUT_STRING);
} catch (Exception e) {
e.printStackTrace();
if (e.getMessage().equals(MAGConstant.C_CHECK_SIGN_FAIL)) {
return QSRentalOutBean.jsonCommonReturn(MAGConstant.C_CHECK_SIGN_FAIL,
MAGConstant.M_CHECK_SIGN_FAIL);
}
if (e.getMessage().equals(MAGConstant.C_SYSTEM_EXCEPTION)) {
return QSRentalOutBean.jsonCommonReturn(MAGConstant.C_SYSTEM_EXCEPTION,
MAGConstant.M_SYSTEM_EXCEPTION);
}
return QSRentalOutBean.jsonCommonReturn(MAGConstant.C_FAIL,
MAGConstant.M_FAIL);
}
logger.info("返回数据 : " + response);
return response;
}
@Path("QSRentalSendResult")
@Produces({ MediaType.TEXT_PLAIN })
@POST
public String qsRentalSendResult(@Context HttpServletRequest request) {
String response = "";
try {
QSRentaResultInBean bean = new QSRentaResultInBean(request);
context.setAttribute(QSRentalResultOperation.IN_BEAN, bean);
OPCaller.call(QSRentalResultOperation.ID, context);
response = (String) context
.getAttribute(QSRentalResultOperation.OUT_STRING);
} catch (Exception e) {
e.printStackTrace();
if (e.getMessage().equals(MAGConstant.C_SYSTEM_EXCEPTION)) {
return QSRentalOutBean.jsonCommonReturn(MAGConstant.C_SYSTEM_EXCEPTION,
MAGConstant.M_SYSTEM_EXCEPTION);
}
return QSRentalOutBean.jsonCommonReturn(MAGConstant.C_FAIL,
MAGConstant.M_FAIL);
}
logger.info("返回数据 : " + response);
return response;
}
}
2.Service层:@Service @Transaction
@Service
@Transactional
public class CityListInitService {
private static Logger logger = LoggerFactory
.getLogger(CityListInitService.class);
@Autowired
private CommonDAO dao;
public String cityListInitLogic(CityListInitInBean bean) throws Exception {
List<ConfigSystem> listConfigSys = dao
.getConfigSysList(MAGConstant.CITY_UPDATE);
ConfigSystem cs = listConfigSys.get(0);
String sysTime = cs.getPa();// 时间
int key = Integer.parseInt(bean.getInstallStatus());
switch (key) {
case 0:// 首次安装
logger.info("app 首次安装 ,需要更新数据");
return cityList(bean, sysTime);
default:// 非首次安装
if (DataFormat.sort(sysTime, bean.getTime()) == true) {// 系统更新时间之后的时间,
logger.info("app 非首次安装 ,不需更新。更新时间大于系统更新时间 不需要更新");
return CityListInitOutBean.notNeedUpdate(sysTime);
} else {
logger.info("app 非首次安装 。更新时间小于系统更新时间 需要更新");
return cityList(bean, sysTime);
}
}
}
}
3:标记事务:
@Transactional(propagation = Propagation.REQUIRED)
private String cityList(CityListInitInBean bean, String sysTime)
throws Exception {
List<CityListInitBean> list = getCityList(bean);
return CityListInitOutBean.needUpdate(list, sysTime);
}
4:很多知识点啊 :
@Repository
@Transactional
public class CommonDAO extends HibernateBaseDao<Object, Long> {
public List<QSRentalOrder> queryByHQLPage(String hql, int pagesize,
int pageNum) {
Query query = this.createQuery(hql);
query.setFirstResult(pageNum);
query.setMaxResults(pagesize);
@SuppressWarnings("unchecked")
List<QSRentalOrder> list = query.list(); // 得到每页的数据
return list;
}
}
问题就是出在:就是会忘得很快
拓展起来:
<context:component-scan/> 还允许定义过滤器将基包下的某些类纳入或排除。Spring 支持以下 4 种类型的过滤方式,通过下表说明:
表 1. 扫描过滤方式
过滤器类型 | 说明 |
---|---|
注释 | 假如 com.sand.SomeAnnotation 是一个注释类,我们可以将使用该注释的类过滤出来。 |
类名指定 | 通过全限定类名进行过滤,如您可以指定将 com.sand.Boss 纳入扫描,而将 com.sand.Car 排除在外。 |
正则表达式 | 通过正则表达式定义过滤的类,如下所示: com\.sand\.Default.* |
AspectJ 表达式 | 通过 AspectJ 表达式定义过滤的类,如下所示: com. sand..*Service+ |
举个例子:
<context:component-scan base-package="com.sand">
<context:include-filter type="regex" expression="com\.sand\.service\..*"/>
<context:exclude-filter type="aspectj" expression="com.sand.util..*"/>
</context:component-scan>
如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用
@Repository
、
@Service
和
@Controller
对分层中的类进行注释,而用
@Component
对那些比较中立的类进行注释。