spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入
来源:互联网 发布:网络第三方代理加盟 编辑:程序博客网 时间:2024/04/28 14:58
今天被一个徐家汇商城的技术经理坑了一把;翻一下以前的代码,找找问题出在哪里了 ;
粗放的贴一下代码:
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);@Autowiredprivate OperationContext context;@Path("QSRental")@Produces({ MediaType.TEXT_PLAIN })@POSTpublic 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 })@POSTpublic 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@Transactionalpublic class CityListInitService {private static Logger logger = LoggerFactory.getLogger(CityListInitService.class);@Autowiredprivate 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@Transactionalpublic 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. 扫描过滤方式
举个例子:
<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
对那些比较中立的类进行注释。 0 0
- spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入
- Spring自动注入,@Autowired
- Spring学习笔记 创建自动扫描并注入的bean
- spring @Autowired 自动注入 失败
- Spring属性注入Bean的List属性
- servlet 中使用Spring自动注入的bean
- 使用Spring 2.5注解自动注册Bean的配置
- Interceptor无法用Autowired自动注入Bean
- 使用@Autowired自动装配bean
- Spring MVC中使用@Autowired实现自动注入
- [Spring] 注入Bean属性
- Spring Bean装配--Autowired注解注入说明
- Spring自动注入Bean
- Spring自动注入Bean
- 关于Struts在Spring中使用autowired 自动注入的问题
- 关于Struts在Spring中使用autowired 自动注入的问题
- Spring 之 Bean的属性注入
- Spring中Bean的简单属性注入
- iOS 10解决了用iPhone 6s拍照最烦人的事情
- git remove all untracked file
- POJ——3159Candies(差分约束SPFA+前向星+各种优化)
- JHTP自测题_第二章_Java应用、输入、输出及运算符简介
- siri sdk
- spring 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入
- 使用AndroidStudio笔录
- Python 程序员经常犯的 10 个错误
- 深入理解java String类
- 关于groupby排序的总结
- 关于Android UML
- Effective C++--条款03:尽可能使用const
- 一致性哈希
- onNewIntent调用时机