spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入
2016-06-14 14:33
1086 查看
今天被一个徐家汇商城的技术经理坑了一把;翻一下以前的代码,找找问题出在哪里了 ;
粗放的贴一下代码:
1.spring配置文件:这句画的意思是扫面以com.sand开头包中的所有有注解的类注入spring。(就是IOC意思,不要再手工的写)
2.研习一下代码:接口API:@Componet
2.Service层:@Service @Transaction
3:标记事务:
4:很多知识点啊 :
问题就是出在:就是会忘得很快
拓展起来:
<context:component-scan/> 还允许定义过滤器将基包下的某些类纳入或排除。Spring 支持以下 4 种类型的过滤方式,通过下表说明:
表 1. 扫描过滤方式
举个例子:
如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用
粗放的贴一下代码:
1.spring配置文件:这句画的意思是扫面以com.sand开头包中的所有有注解的类注入spring。(就是IOC意思,不要再手工的写)
<!-- spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 --> <context:component-scan base-package="com.sand"></context:component-scan>
2.研习一下代码:接口API:@Componet
@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对那些比较中立的类进行注释。
相关文章推荐
- ReentrantReadWriteLock重入锁中的读写锁在公平和非公平模式下的资源抢占测验
- java基础 位运算符 >> <<
- Spring对Hibernate事务管理
- 7虚拟机类加载机制
- java中计算时间差,精确到毫秒
- java集合排序——Collections.sort()的两种用法
- 6类文件结构
- Jersey入门三:创建一个JavaEE的Web项目
- Maven版本与JDK版本
- 3 垃圾收集器与内存分配策略
- java 生成zip 包
- java生成随机字符串
- 安装weblogic12后打不开Configuration Wizard提示不能新建java虚拟机解决办法
- Java 相关时间工具类
- # 2 java内存区域与内存溢出异常
- java同步互斥,生产者消费者
- 如何配置openjdk的 java home
- EcLipse错误--Workspace in use or cannot be created, choose a different one.--错误解决办法
- 分布式锁1 Java常用技术方案(转)
- 在 Eclipse 中使用 JUnit4 进行单元测试(图文教程一)