spring自定义泛型类中AutoWired注入为null
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,我在实际开发中遇到有一段公共的代码,几个方法都需要掉,但如果单独拉出来写一个方法的话,入参又不同,所以想到了用泛型。比如这是一段公共代码://保存订单信息,需要多个方法调用OrderFilterReq
千家信息网最后更新 2025年02月04日spring自定义泛型类中AutoWired注入为null
我在实际开发中遇到有一段公共的代码,几个方法都需要掉,但如果单独拉出来写一个方法的话,入参又不同,所以想到了用泛型。
比如这是一段公共代码:
//保存订单信息,需要多个方法调用OrderFilterRequest orderFilterRequest = new OrderFilterRequest();btOrderFilterRequest.setUserId("1");btOrderFilterRequest.setStatus("0");ListorderResultList = orderService.findOrders(orderFilterRequest);Order result = null; if(CollectionUtils.isEmpty(orderResultList )){ Order order = CopierUtils.convert(request, Order.class); order.setRealName(customer.getRealName()); order.setIdcardNo(customer.getIdcardNo()); order.setOrderNo("order" + DateUtil.getYMDHMS()); order.setStatus("0"); order.setCreateTime(new Date()); order.setUpdateTime(new Date()); order.setUserId("1"); result = orderService.createOrder(Order);}else{ Order orderResult = orderResultList.get(0); CopierUtils.copy(request, orderResult); orderResult.setUpdateTime(new Date()); result = orderService.updateOrder(btOrderResult);}
将这段代码提炼成泛型类:
@Transactional(readOnly = true)@Componentpublic class OrderRequest{ @Autowired private OrderService orderService; @Transactional public Order orderInfoSave(T request) { OrderFilterRequest orderFilterRequest = new OrderFilterRequest(); btOrderFilterRequest.setUserId("1"); btOrderFilterRequest.setStatus("0"); List orderResultList = orderService.findOrders(orderFilterRequest); Order result = null; if(CollectionUtils.isEmpty(orderResultList )){ Order order = CopierUtils.convert(request, Order.class); order.setRealName(customer.getRealName()); order.setIdcardNo(customer.getIdcardNo()); order.setOrderNo("order" + DateUtil.getYMDHMS()); order.setStatus("0"); order.setCreateTime(new Date()); order.setUpdateTime(new Date()); order.setUserId("1"); result = orderService.createOrder(Order); }else{ Order orderResult = orderResultList.get(0); CopierUtils.copy(request, orderResult); orderResult.setUpdateTime(new Date()); result = orderService.updateOrder(btOrderResult); } return result; }}
最开始我是这么调用的:
public void method1(Request1 request ) { OrderRequestorderCreateRequest = new OrderRequest (); Order result = OrderCreateRequest.orderInfoSave(request);}public void method2(Request2 request ) { OrderRequest orderCreateRequest = new OrderRequest (); Order result = OrderCreateRequest.orderInfoSave(request);}
但是OrderRequest中orderService为null。(在controller层中注入service接口,在service层中注入orderService是有值的),尝试可很多解决办法,最后发现,原来spring自定义的类实例化时也需要用注入的方式,不能用new,否则脱离了spring的管理。改成如下方式就可以了:
@Autowiredprivate OrderRequestrequest1;@Autowiredprivate OrderRequest request2;public void method1(Request1 request ) { Order result = request1.orderInfoSave(request);}public void method2(Request2 request ) { Order result = request2.orderInfoSave(request);}
代码
方法
方式
不同
信息
办法
多个
实例
实际
接口
订单
这是
拉出
尝试
开发
管理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
银行软件开发中心 跳槽
mysql 数据库文件多大
软件开发相关总结
你认为网络安全
修改数据库名和表名
网络技术需要什么配置电脑
视频流媒体管理服务器
swing 获取表格数据库
串口服务器能接几台设备
部队网络安全知识内容
青岛电脑软件开发工程师
json模拟数据库查询
网络安全自我评估报告
信息技术数字技术网络技术
为什么要服务器虚拟化
联网3d软件开发
宁波大应软件开发公司
软件开发框架wfm
怎么包服务器
游戏运营服务器
济南直播软件开发公司如何选择
ipad尝试连接服务器出错
ios抢红包软件开发
检索数据库的最新发展技术
五邑大学网络安全宣传周
江北一站式软件开发企业
数据库求和语句 多条件
服务器的拼音单词
服务器网卡厂商
获取服务器ip