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. API 接口的安全设计验证:ticket,签名,时间戳

    一.背景 1.与前端对接的API接口,如果被第三方抓包并进行恶意篡改参数,可能会导致数据泄露,甚至会被篡改数据 2.与第三方公司的接口对接,第三方如果得到你的接口文档,但是接口确没安全校验,是十分不安 ...

  2. 了解Java格式化输出printf,一篇就够了

    格式化详解 格式化输出 转换符 常用转换符 日期转换 搭配标志 了解C语言的都知道,C语言的输出语句printf();可以对里面的内容格式化然后输出.那么在Java中也给我们提供了相关的方法.两者十分 ...

  3. gitlab登录时出现402的错误

    当登录gitlab时出现402的错误提示,可进行以下操作 重新设置一下系统时间 在new project 时若还出现同样的402问题,则清除一下浏览器的cookie即可

  4. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  5. Solution -「牛客 NOIP 模拟赛」打拳

    \(\mathcal{Description}\)   现 \(2^n\) 个人进行淘汰赛,他们的战力为 \(1\sim 2^n\),战力强者能战胜战力弱者,但是战力在集合 \(\{a_m\}\) 里 ...

  6. Solution -「ABC 219H」Candles

    \(\mathcal{Description}\)   Link.   有 \(n\) 支蜡烛,第 \(i\) 支的坐标为 \(x_i\),初始长度为 \(a_i\),每单位时间燃烧变短 \(1\) ...

  7. Redis 源码简洁剖析 13 - RDB 文件

    RDB 是什么 RDB 文件格式 Header Body DB Selector AUX Fields Key-Value Footer 编码算法说明 Length 编码 String 编码 Scor ...

  8. JVM内存结构的组成、各部分功能作用

    一.程序计数器  作用:是记住下一条jvm指令的执行地址  特点: 是线程私有的 不会存在內存溢出 二.虚拟机栈 每个线程运行时所需要的内存,称为虚拟机栈 每个栈由多个栈帧(Frame) 组成,对应着 ...

  9. 为什么三层架构中业务层(service)、持久层(dao)需要使用一个接口?

    为什么三层架构中业务层(service).持久层(dao)需要使用一个接口? 如果没有接口那么我们在控制层使用业务层或业务层使用持久层时,必须要学习每个方法,若哪一天后者的方法名改变了则直接影响到前面 ...

  10. ensp上防火墙上配置nat

    博文大纲:一.华为防火墙NAT的六个分类:二.解决NAT转换时的环路及无效ARP:三.server-map表的作用:四.NAT对报文的处理流程:五.各种常用NAT的配置方法: 一.华为防火墙NAT的六 ...