以前都是用MyEclipse集成开发,开发速度快,但是很多时候对本身的机制不是很了解,所以现在从头开始基本配置。
依赖注入和控制反转是同一个概念,在未使用spring情况下的时候,在调用一个类的时候,需要创建类的实例,然后才能使用。有了spring以后,这个类的创建的工作有spring完成,然后注入调用者。
设置注入方法:
main.java:
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/applicationContext.xml");
People p = (People) ctx.getBean("axechinese");
p.useAxe();
}
public interface People {
public void useAxe();
}
public interface Axe {
public void chop();
}
public class Chinese implements People {
private Axe axe;
@Override
public void useAxe() {
axe.chop();
}
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
}
public class stone implements Axe {
@Override
public void chop() {
System.out.println("stoneaxe chop");
}
}
xml:文件:
<bean id="axechinese" class="com.mixian.axePeople.Chinese">
在这里将另一个bean注入给axechinese中 注意一定要有setAxe方法~
<property name="axe">
<ref local="stoneAxe"></ref>
</property>
</bean>
<bean id="stoneAxe" class="com.mixian.axePeople.stone">
</bean>
另一种方法:
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/applicationContext.xml");
Chinese p = (Chinese) ctx.getBean("axechinese");
p.setAxe((Axe)(ctx.getBean("stone")));
p.useAxe();
xml文件:
<!--构造传入 -->
<bean id="axechinese" class="com.mixian.axePeople.Chinese">
<constructor-arg><ref bean="stone"/></constructor-arg>
</bean>
<bean id="stone" class="com.mixian.axePeople.stone"/>
标准的构造传入:
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/applicationContext.xml");
Chinese p = (Chinese) ctx.getBean("axechinese");
// p.setAxe((Axe)(ctx.getBean("stone")));
p.useAxe();
构造函数:
public class Chinese implements People {
private Axe axe;
public Chinese(){}
public Chinese(Axe axe){
this.axe = axe;
}
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
@Override
public void useAxe() {
axe.chop();
}