spring自定义泛型类中AutoWired注入为null
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,我在实际开发中遇到有一段公共的代码,几个方法都需要掉,但如果单独拉出来写一个方法的话,入参又不同,所以想到了用泛型。比如这是一段公共代码://保存订单信息,需要多个方法调用OrderFilterReq
千家信息网最后更新 2026年11月02日spring自定义泛型类中AutoWired注入为null
我在实际开发中遇到有一段公共的代码,几个方法都需要掉,但如果单独拉出来写一个方法的话,入参又不同,所以想到了用泛型。
比如这是一段公共代码:
//保存订单信息,需要多个方法调用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);} 将这段代码提炼成泛型类:
@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 ) { OrderRequest orderCreateRequest = 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安全错误
数据库的锁怎样保障安全
互联网科技图片
互联网科技公司简介
智能科技公司是互联网公司吗
北京互联网科技
互联网科技公司怎么样
齐家互联网科技
美国互联网前沿科技
顺网科技2021年互联网排名
互联网科技公司的市场部门
哈尔滨新华互联网科技学院
中化能源互联网科技招聘
互联网为啥属于高科技
互联网科技革命什么开始
中国航天科技大学国际工业互联网
注册互联网科技公司经营范围大全
链环科技传统企业怎么转型互联网
互联网科技的全部知识
爱医互联网络科技
工业互联网科技成果转化
国产互联网科技公司
国智互联网科技
科技金融是不是互联网金融
恒银科技与互联网金融
深圳互联网科技的发展
互联网企业科技类企业如何做账
北京市互联网新科技
陕西云淼互联网科技公司
银川新华互联网科技学校是国营吗
科技互联网专业工作会议发言稿
银川新华互联网科技学校招聘