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有两个属性是比较重要的,分 ...
随机推荐
- 2022寒假集训day4
day4(day5补完的) 继续刷搜索方面的题, 初步了解了序列. T1 迷宫问题 题目描述设有一个 n*n 方格的迷宫,入口和出口分别在左上角和右上角.迷宫格子中分别放 0 和 1 ,0 表示可通, ...
- CentOS虚拟机关闭防火墙
关闭防火墙 systemctl stop firewalld 关闭防火墙开机自启动 systemctl disable firewalld 关闭安全机制,将selinux设置为disabled vi ...
- 在MacOS安装puppeteer
安装node:升级:npm i npm 安装yarn:需要注意先把yarn的流程跑完,特别是package.json 安装puppeteer:yarn add puppeteer 安装完成以后需要重启 ...
- NOIP2021T1报数——黄蓝紫黑的神奇梯度
7A3T 点击查看代码 #include<iostream> #include<cstdio> #include<cmath> #include<algori ...
- 04.python语法入门--基本数据类型
# python是一门解释型的.强类型的.动态语言# 一:数字类型# 1.1 整型int:记录人的年龄.等级.号码.个数# age = 18# print(type(age))# 1.2 浮点数 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- C语言strtok_s函数
strtok_s 在C语言中的作用是分割出一个字符串中的单词 在MSDN上参数表: strtok_s strToken String containing token or tokens. strDe ...
- shell脚本的“奇迹暖暖“之行 -- printf彩色输出
printf \n" \n代表换行 "\e[1;30m \e[0m" 深灰 "\e[1;31m \e[0m" 红色 "\e[1;32m \e ...
- Spring 配置概述
理解了IoC的概念,那Spring框架是如何具体操作的呢?Spring IoC容器(ApplicaitonContext)负责创建Bean,并通过容器将功能类Bean注入到其他需要的Bean中.Spr ...
- linux服务器登录微信报警通知
linux服务器ssh登录安全规则中,理论上要做到:防火墙限制,hosts.allow限制,root禁止登录,用户权限分配,ssh端口修改,登录时间限制,堡垒机登录. 这里只讲登录时间限制和登录报警通 ...