这两天在写SpringMVC,从前端传入一个对象的各个属性的值时,后端对象没有接收到值,debug
了很久。
首先写了一个实体类User
如下:
1 | package com.luo.pojo; |
然后是一个简单的控制器
1 | package com.luo.controller; |
利用Tomcat部署后,在本地请求http://localhost:8080/luo/user?age=15&name=luo&id=10
后端获取的结果为:
age=0
id=0
name=Null
debug了一晚上,结果发现是自己看教程的时候太粗心了居然没有写set
方法,果然写了set
方法后成功解决,获取到了对应的值。
因此猜想从前端传值的注入方式是set方法注入
,又想起Spring Bean对象注入的方式有set方法注入
和构造器方式注入
,好奇心所以想试一下能否通过构造函数注入,于是在User类中添加了全参构造函数
1 | public User(String name, int age, int id) { |
发现使用构造器函数注入
也可以完成对前端传入数据的接收!。
然后好奇心又来了,如果构造函数
和set方法
同时存在,SpringMVC会优先调用哪种注入方式呢?
测试发现SpringMVC居然先调用了构造函数,如果对应的属性的set方法存在,还会接着调用该属性对应的set方法。
然后好奇心又又又来了,如果不是全参构造函数,只是部分参数的构造函数,还可以正常的注入吗?
于是写了name和age的构造函数,id字段保留set
方法
1 | public User(String name, int age) { |
结果发现同时调用了两个参数的构造函数和setId方法,可以正常的识别到传入的数据和进行注入,用法还是挺灵活的。
em,没有好奇心了~