new和@Autowired的区别
controller层:
@RequestMapping("/payment")
@RestController
public class WxPayController { public WxPayServiceImpl wxPayService = new WxPayServiceImpl(); @RequestMapping("/wxpay/{product_id}")
public String getWxQrCode(@PathVariable("product_id") Integer productId) {
System.out.println(productId);
return wxPayService.getWxQrCode(productId);
}
}
service层:
@Service
public class WxPayServiceImpl implements WxPayService { @Autowired
public WxPayConfigBean wxPayConfigBean; @Override
public String getWxQrCode(Integer productId) {
System.out.println("wxPayConfigBean:" + wxPayConfigBean);
HashMap<String, String> map = new HashMap<String,String>();
map.put("appid",wxPayConfigBean.getAppID());
map.put("mch_id",wxPayConfigBean.getMchID());
//这里获得的是以秒为单位的时间戳
Long timeStamp = WXPayUtil.getCurrentTimestamp();
map.put("time_stamp",timeStamp.toString());
map.put("product_id",productId.toString());
try {
map.put("sign",WXPayUtil.generateSignature(map,wxPayConfigBean.getKey()));
} catch (Exception exception) {
exception.printStackTrace();
}
String str = "//wxpay/bizpayurl?"
+ "sign=" + map.get("sign")
+ "&appid=" + map.get("appid")
+ "&mch_id= " + map.get("mch_id")
+ "&product_id=" + map.get("product_id")
+ "&time_stamp=" + map.get("time_stamp")
+ "&nonce_str=" + map.get("nonce_str");
return JsonUtil.ajaxReturn(str);
}
}测试该接口可以发现:
wxPayConfigBean:null
,显然即便这里用了@Autowired但还是注入失败了.然是如果我们通过junit直接测试:@Autowired
public WxPayConfigBean wxPayConfigBean; @Test
void contextLoads() {
System.out.println(wxPayConfigBean.toString());
}
此时,数据注入又是成功的.
查询了比较多的资料后我突然明白自己对于new和@Autuwired的理解还是有很大问题.new创建了一个新对象,但Autowired不是,它是通过先匹配类型再匹配名字的方式(这个顺序正好和@Resource相反)取出由spring管理的对象.回到上面的代码,可以发现在controller层我们拿到的WxPayServiceImpl对象是new出来的,而不是从spring管理的对象中取出的,那么WxPayServiceImpl中的wxPayConfigBean对象更不可能是spring中配置好的对象(相当于无参构造),所以导致最后输出为Null,只要稍微修改一下即可
@RequestMapping("/payment")
@RestController
public class WxPayController { @Autowired
public WxPayServiceImpl wxPayService; @RequestMapping("/wxpay/{product_id}")
public String getWxQrCode(@PathVariable("product_id") Integer productId) {
System.out.println(productId);
return wxPayService.getWxQrCode(productId);
}
}
new和@Autowired的区别的更多相关文章
- 【Java面试】@Resource 和 @Autowired 的区别
Hi,大家好,我是Mic. 一个工作2年的粉丝,问我一个Spring里面的问题. 希望我能从不同的视角去分析,然后碾压面试官. 这个问题是: "@Resource和@Autowired&qu ...
- @Resource和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- spring @Resource和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- @Autowired & @Resource 区别 & 解读@Bean
一样 Autowired & @Resource 都可以用来Bean的注入,可以写在属性(字段)上.也可以写在setter方法上 不一样 1.来源不一样 @Autowired 由Spr ...
- Spring注解@Resource和@Autowired的区别
@Resource和@Autowired都是用来做bean的依赖注入的,两者都可以写在字段和setter方法上. java为我们提供了 javax.annotation.Resource这个注解. s ...
- @Inject.@Resource.@Autowired 的区别
@Inject:Struts2的注解, @Resource : J2EE提供,用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") ...
- 简析@Resource 和 @Autowired的区别
@Autowird @Autowird 属于spring框架,默认使用类型(byType)进行注入,例如下面代码: @Autowired public IUserService userService ...
- 详细解析@Resource和@Autowired的区别 , 以及@Qualifier的作用
(41) (0) 首先 . @Resource是javax.annotation 包中的注解类 , 是jdk中封装的 . @AutoWired是spring的中注解,依赖于spring上下文. 相同 ...
- Spring中@Resorce和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
随机推荐
- KubeSphere单节点(all-in-one)平台搭建记录
KubeSphere单节点(all-in-one)平台搭建记录 目录 KubeSphere单节点(all-in-one)平台搭建记录 一.主机准备 1.1 主机配置 1.2 环境准备 二.下载kube ...
- linux_12
一.主从复制及主主复制的实现 主从复制 master配置 # yum -y install mysql-server # systemctl enable --now # vim /etc/my.cn ...
- Solution -「CF 1586F」Defender of Childhood Dreams
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
- 通过shell脚本进行linux服务器的CPU和内存压测
文章目录 内存压测 python的方式 shell的方式 cpu压测 在正常手段下,这个只是压测的方法 在不正常手段下(crontab计划任务),可以提高CPU和内存的使用率 什么?你问我为什么要提高 ...
- Nginx服务器SSL证书安装
操作场景 本文档指导您如何在 Nginx 服务器中安装 SSL 证书. 说明: 本文档以证书名称 www.domain.com 为例. Nginx 版本以 nginx/1.16.0 为例. 当前服务器 ...
- 微服务从代码到k8s部署应有尽有系列(六、订单服务)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...
- MyBatisPlus分页不起作用?因为少了配置
/** @author QiuQiu&LL @create 2021-09-05 0:25 @Description: / @EnableTransactionManagement @Conf ...
- VUE3 之 使用标签实现动画与过渡效果(下) - 这个系列的教程通俗易懂,适合新手
1. 概述 毛毛虫效应: 有这样一个实验,将许多毛毛虫放在一个花盆边缘,使它们首尾相接,围成一个圈.然后在离花盆很近的地方撒了一些毛毛虫的食物. 此时,毛毛虫并不会向食物的方向爬去,而是在花盆边缘,一 ...
- Qt:自动为class的所有属性生成getter、setter
在类所在的.h文件中,右键类名,Refactor → Create Getter and Setter
- C# NPOI导出数据到Excel
1 public void Export() 2 { 3 //创建工作簿对象 4 IWorkbook workbook = new XSSFWorkbook(); 5 6 ExportStatisti ...