构建Spring项目关键步骤:java
1.导入依赖Jar包:spring
2.编写JAVA文件,以及配置文件,机构如图所示:框架
位置可移动,具体下边详解.测试
如此,一个简单的Spring项目基本框架搭建完成.this
Spring核心机制在于依赖注入或者叫控制反转(IOC).依赖注入不单单有Spring,亦有HiveMind,具体待之后了解补充.xml
依赖注入能够认为是,使用者不须要关心对象如何生成,直接就能够拿来用,对象的生成由容器控制生成,注入方式通常有两种(还有第三种,接口注入暂不描述).对象
第一个是设值注入,即经过set方法注入,代码以下:接口
public interface Person {
public void useAxe();
}get
--------------------------------------io
public interface Axe {
public String chop();
}
--------------------------------------
public class Chinese implements Person {
private Axe axe;
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
--------------------------------------
public class StoneAxe implements Axe {
public String chop() {
return "石斧砍";
}
}
--------------------------------------
配置文件内容:
<bean id="stoneAxe" class="main.java.service.impl.StoneAxe" />
<bean id="chinese" class="main.java.service.impl.Chinese">
<property name="axe" ref="steelAxe" />
</bean>
--------------------------------------
测试类:
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");
//ClassPathXmlApplicationContext加载路径默认src
//new FileSystemXmlApplicationContext("src/bean.xml");
//FileSystemXmlApplicationContext默认加载路径为项目根目录
Person person = ctx.getBean("chinese", Person.class);
person.useAxe();
--------------------------------------
输出结果:石斧砍
第二个是构造注入,即经过构造器注入,代码以下:
public class Chinese implements Person {
private Axe axe;
public Chinese () {}
public Chinese (Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
--------------------------------------
配置文件:
<bean id="chinese" class="main.java.service.impl.Chinese">
<constructor-arg ref="steelAxe" />
</bean>
--------------------------------------
两种方式各有千秋,若是比较复杂的依赖,使用构造注入,形参的不肯定性,可能致使构造器比较笨重.固然若是有明确的依赖关系,使用构造依赖可以清楚地决定注入顺序.因为依赖关系都在构造器内设定,不用担忧上层代码的破坏,这里须要理解spring对于bean的初始化以及scope,待明天记录.构造注入还有一个好处就是因为在构造器内设定依赖关系,故只有组建建立者能够修改,对于使用者透明,符合高内聚.
另外还有一种依赖方式是接口注入,之后会作补充.
遗留问题:
1.Spring的Bean初始化过程,scope属性详解(参见scope详解).
2.HiveMind详解