1. 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());
    }

    此时,数据注入又是成功的.

  2. 查询了比较多的资料后我突然明白自己对于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的区别的更多相关文章

  1. 【Java面试】@Resource 和 @Autowired 的区别

    Hi,大家好,我是Mic. 一个工作2年的粉丝,问我一个Spring里面的问题. 希望我能从不同的视角去分析,然后碾压面试官. 这个问题是: "@Resource和@Autowired&qu ...

  2. @Resource和@Autowired的区别

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...

  3. spring @Resource和@Autowired的区别

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...

  4. @Autowired & @Resource 区别 & 解读@Bean

    一样     Autowired & @Resource 都可以用来Bean的注入,可以写在属性(字段)上.也可以写在setter方法上 不一样 1.来源不一样 @Autowired 由Spr ...

  5. Spring注解@Resource和@Autowired的区别

    @Resource和@Autowired都是用来做bean的依赖注入的,两者都可以写在字段和setter方法上. java为我们提供了 javax.annotation.Resource这个注解. s ...

  6. @Inject.@Resource.@Autowired 的区别

    @Inject:Struts2的注解, @Resource : J2EE提供,用于注入,( j2ee提供的 ) 默认按名称装配,@Resource(name="beanName") ...

  7. 简析@Resource 和 @Autowired的区别

    @Autowird @Autowird 属于spring框架,默认使用类型(byType)进行注入,例如下面代码: @Autowired public IUserService userService ...

  8. 详细解析@Resource和@Autowired的区别 , 以及@Qualifier的作用

    (41)  (0) 首先 . @Resource是javax.annotation 包中的注解类 , 是jdk中封装的 . @AutoWired是spring的中注解,依赖于spring上下文. 相同 ...

  9. Spring中@Resorce和@Autowired的区别

    @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...

随机推荐

  1. KubeSphere单节点(all-in-one)平台搭建记录

    KubeSphere单节点(all-in-one)平台搭建记录 目录 KubeSphere单节点(all-in-one)平台搭建记录 一.主机准备 1.1 主机配置 1.2 环境准备 二.下载kube ...

  2. linux_12

    一.主从复制及主主复制的实现 主从复制 master配置 # yum -y install mysql-server # systemctl enable --now # vim /etc/my.cn ...

  3. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  4. 通过shell脚本进行linux服务器的CPU和内存压测

    文章目录 内存压测 python的方式 shell的方式 cpu压测 在正常手段下,这个只是压测的方法 在不正常手段下(crontab计划任务),可以提高CPU和内存的使用率 什么?你问我为什么要提高 ...

  5. Nginx服务器SSL证书安装

    操作场景 本文档指导您如何在 Nginx 服务器中安装 SSL 证书. 说明: 本文档以证书名称 www.domain.com 为例. Nginx 版本以 nginx/1.16.0 为例. 当前服务器 ...

  6. 微服务从代码到k8s部署应有尽有系列(六、订单服务)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  7. MyBatisPlus分页不起作用?因为少了配置

    /** @author QiuQiu&LL @create 2021-09-05 0:25 @Description: / @EnableTransactionManagement @Conf ...

  8. VUE3 之 使用标签实现动画与过渡效果(下) - 这个系列的教程通俗易懂,适合新手

    1. 概述 毛毛虫效应: 有这样一个实验,将许多毛毛虫放在一个花盆边缘,使它们首尾相接,围成一个圈.然后在离花盆很近的地方撒了一些毛毛虫的食物. 此时,毛毛虫并不会向食物的方向爬去,而是在花盆边缘,一 ...

  9. Qt:自动为class的所有属性生成getter、setter

    在类所在的.h文件中,右键类名,Refactor → Create Getter and Setter

  10. C# NPOI导出数据到Excel

    1 public void Export() 2 { 3 //创建工作簿对象 4 IWorkbook workbook = new XSSFWorkbook(); 5 6 ExportStatisti ...