构建Spring项目关键步骤:
1.导入依赖Jar包:
2.编写JAVA文件,以及配置文件,机构如图所示:
位置可移动,具体下边详解.
如此,一个简单的Spring项目基本框架搭建完成.
Spring核心机制在于依赖注入或者叫控制反转(IOC).依赖注入不仅仅有Spring,亦有HiveMind,具体待以后了解补充.
依赖注入可以认为是,使用者不需要关心对象如何生成,直接就可以拿来用,对象的生成由容器控制生成,注入方式一般有两种(还有第三种,接口注入暂不描述).
第一个是设值注入,即通过set方法注入,代码如下:
public interface Person {
public void useAxe();
}
--------------------------------------
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详解