由于公司项目的原因,开始接触到sprin,从一脸懵逼开始,于是一边请教同学,一边买了本Spring实战开始看起来,现在简单记录下,加深记忆.
在我目前学习过程而言,对spring的认识还在于通过xml配置文件的依赖注入实现对象之间的松耦合。依赖注入主要有三种形式:构造器注入,setter注入和p注入,其中p注入是setter注入的简化形式。
举个栗子
有如下代码块:
package mawu.com;
class Performer{
String song;
Instrument ins;
Performer(){}
Performer(String song, Instrument ins){
this.song = song;
this.ins = ins;
}
public String getSong(){
return this.song;
}
public Instrument getInstrument(){
return this.ins;
}
public void setSong(String song){
this.song = song;
}
public void setInstrument(Instrument ins){
this.ins = ins;
}
//其他method
...
}
package mawu.com;
public interface Instruments{
public void perform();
}
package mawu.com.Instruments;
public class Guitar implements Instrument{
@overwrite
public void perform(){
System.out.println("guitar, guitar, guitar");
}
}
对于以上一个类的初始化,采用依赖注入的方式下,xml文件有三种配置方式。
对于spring的XML文件而言,每个对象都是配置在spring容器的bean中的。
既然已经声明了Performer类,则我们可以配置我们第一个Performer对象,假设叫Jack。
1、 构造器注入:
1)默认构造器
<bean id = "Jack" class = "mawu.com.Performer" />
// 相当于 Jack = new mawu.com.Performer();
2)指定构造器
<bean id = "Jack"
class = mawu.com.Performer>
<constructor-arg song = "see you again" />
<constructor-arg ref = "guitar" />
</bean>
----------
<bean id = "guitar" class = "mawu.com.Instruments.Guitar" />
//
//相当于Jack = new mawu.com.Performer("see you again",guitar);
2、setter注入
对于类Performer而言,每个成员变量还有自己的set方法,除了通过构造器构造外,也可以通过set方法对每个成员变量注入。通过setter注入的bean如下所示:
<bean id = "Jack", class= mawu.com.Performer>
<property name = "song" value = "see you again"/>
<property name = "ins" ref = "guitar" />
<!--注入内部bean-->
<!-- <property name = "ins"> <bean class = "mawu.com.Instruments.Guitar" / -->
</bean>
----------
<bean id = "guitar" class = "mawu.com.Instruments.Guitar" />
通过setter注入,spring会自动去找对应对象的setter方法,完成成员变量的初始化。
3、p注入
property注入写起来比较麻烦,简化形式即为p注入。要想使用p注入,在spring 的XML配置文件中需要加一段p的声明。在完成声明的前提下,p注入的写法如下:
<bean id = "Jack", class= mawu.com.Performer
p:song = "see you again"
p:ins-ref = "guitar" />
----------
<bean id = "guitar" class = "mawu.com.Instruments.Guitar" />
小结
spring有三种配置方式:构造器注入,关键词位constructor-arg;setter注入,关键词位property;p注入关键词为p