Spring学习文档一
必备条件:
1. spring-framework-3.0.0.RELEASE包
2. IDE开发工具,我用的是MyEclipse6.0
首先在MyEclipse中创建一个基于Spring的工程:
a. 创建一个WEB工程:File à new à web Project
b. 在创建好工程之后 点击工程名然后右键 MyEclipse à add Spring Capabilities
c. 在弹出的框框中选择Spring的版本和编译时使用的包,然后就一直按finished
到此为止工程创建完成。
Spring是一个开源的为了解决企业级应用程序复杂性而开发的框架,目前已经更新到3.0版本。
Spring有几个非常实用而又非常轻量级的模块。每个模块可单独使用并且可以与其他开源框架集成。
我先介绍Spring最重要的2个思想IOC(依赖注入)和AOP(控制反转):
1. IOC(依赖注入):
作用:协调依赖对象之间协作的责任从对象自身转移出来,把这个责任交给Spring的配置文件去管理。那么程序员就可以只考虑当前对象的操作,代码将变得更简洁明了。
大家可以看以下几个列子:
public class PersonSong{
public void song(String name) {
System.out.println(name+“花花唱山歌…..”);
}
}
private String name;
private PersonSong personSong;
public Person(String name) {
this.name=name;
personSong =new PersonSong ();
}
public void song() {
personSong.song(name);
}
}
在这个列子中,如果Person要执行唱歌的方法,则必须先构造出一个PersonSong的对象,大家看PersonSong对象的构造是放在Person的构造方法中,也就是说PersonSong对象的构造必须依赖于Person对象,试想一下,如果你的应用程序非常的庞大,那么这种对象与对象之间,组件和组件之间的关系必将非常的复杂。
这中依赖方式必将带来几个非常大的问题:
1, 由于各个组件之间的依赖性(或者说是耦合性)非常强,那么如果修改了其中任何一个组件,可能导致整个程序的不可用,那么该程序的拓展性必将大大受限。
2, 如果组件的耦合性非常强,那么对于单元测试来说也是非常麻烦的一件事,如果我只想测试Person类,那么上面程序也就顺带测试了PersonSong类,如果遇到非常大的并且里面牵扯到很多个类的时候,这种测试将是非常吃力并且没有效率的测试。
下面我们将给出Spring给我们所做的事:
改写Person类:
public class Person {
private String name;
private PersonSong personSong;
public Person(String name) {
this.name=name;
}
public void song() {
personSong.song(name);
}
public void setPersonSong(PersonSong personSong) {
this.personSong=personSong;
}
}
编写Spring代码,本质就是编写配置文件,那么上面程序的依赖关系我将通过下面的Spring配置文件进行管理
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="song" class=" impl.PersonSong"/>
<bean id="person" class="impl.Person">
<property name="personsong">
//通过Person对象的setPersonSong()方法把PersonSong对象注入到Person对象中
<ref bean="song"/>
</property>
</bean>
</beans>
通过上述配置文件,即可将对象之间的依赖管理从对象自身中转移给Spring框架去管理。上面只是Spring的其中一种注入方式,其他的注入方式将在以后的篇幅中陆续介绍。
上面的代码是否还有可以改进的地方?如果你有方法,那么恭喜你,你已经有一定的面向接口的编程思想了,如何改进同样会在以后的篇幅中介绍。