关于学习spring中Set属性注入的一些疑问
本人在刚开始学习spring框架的时候,对于IOC中的属性注入一直有一个疑惑。那就是在同一类中相同类型的属性,spring是如何进行识别并注入的呢?
在网上找了大部分资料,主要谈两种注入方法:
1.set
2.构造函数
对于第二种方法由于xml文件中可以设置index,所有没什么疑问。主要是第一种方法。其xml文件中属性配置最常用的:
<property name="message" value="你好"></property>
而其中name属性值(message)具体与什么匹配,查找了网上大量的资料,基本上都是说匹配属性名字的。但本人在测试中发现并不是这样。
即使该属性值与属性名字并不对应,也可以正常编译!
package com.mc.app.WebApp;
import javax.swing.Spring;
public class Helloworld {
private String mess;
public void setMessage(String message) {
this.mess=message;
}
public String getMessage(){
return this.mess;
}
public void printMessage() {
System.out.println("Your Message:"+mess);
}
}
我这里属性名字为mess,但它确实能正常编译。
在检查后发现,xml文件中的name属性值其实是对应set方法名的!spring实际上是通过name值找到对应的set方法并执行,即该方法名为set+(name属性值),在通过方法做出相应的行为,如给属性赋值。
package com.mc.app.WebApp;
import javax.swing.Spring;
public class Helloworld {
private String mess;
public void setMessage(String message) {
this.mess=null;
}
public String getMessage(){
return this.mess;
}
public void printMessage() {
System.out.println("Your Message:"+mess);
}
}
xml文件没变,输出为:Your Message:null
所以说xml中的value是传递给set方法中参数的,而不是直接给属性值的。
结论:同一类中不管你有多少类型属性,不管你属性名,它只识别名字为:set+(xml文件中name的值)的方法并执行。如果没找到,则报错。
值得注意的是:
1.set必须小写。
2.name值首字母不区分大小写,其他严格区分。如setMessage()\setmessage()都可以正常执行,而Setmessage()或者setmessAge()都不能正常执行。