Spring的大名早已如雷贯耳,但还没有接触过。趁着这几天比较悠闲,小瞄了下Spring的书籍。
先说说FirstExample吧:
我的开发环境是Myeclipse下的,所以开发Spring相当方便。直接新建项目,右击项目名,在Myeclipse项中,再选择导入Spring.
Ok,环境介绍完毕,来看具体代码:
Action.java(接口)
package spring.ex2;
public interface Action {
public String execute(String str);
}
LowerAction.java
package spring.ex2;
public class LowerAction implements Action {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(String str) {
return (getMessage() + str).toLowerCase();
}
}
UpperAction.java
package spring.ex2;
public class UpperAction implements Action {
private String Message;
public String getMessage() {
return Message;
}
public void setMessage(String message) {
Message = message;
}
public String execute(String str) {
return(getMessage()+str).toUpperCase();
}
}
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<description>Spring Quick Start</description>
<bean id="TheAction" class="spring.ex2.UpperAction">
<property name="message">
<value>Hello</value></property>
</bean>
<bean id="action2" class="spring.ex2.LowerAction">
<property name="message">
<value>Hello</value></property></bean>
</beans>
OK,现在写个SimpleTest.java来运行:
package spring.ex2;
import spring.ex2.Action;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class SimpleTest {
public static void main(String args[]){
SimpleTest test=new SimpleTest();
test.testQuickStart();
}
public void testQuickStart() {
ApplicationContext ctx=new FileSystemXmlApplicationContext("bean.xml");
Action action=(Action)ctx.getBean("TheAction");
System.out.println(action.execute("Rod Johnson"));
action=(Action)ctx.getBean("action2");
System.out.print(action.execute("jeckj"));
}
}
以上文件都完成之后,可以在eclipse中以Java应用程序的方式运行了。
在控制台的输出结果是:
HELLOROD JOHNSON
hellojeckj
这正是我们所要的。现在我们要分析一下代码:
在最终要运行的类SimpleTest.java中,并没有提到所要调用的两个类名,而是用“TheAction”,“action2”,而这两个名称与class文件的关联是在bean.xml中定义的。也就是说,如果要进行重构或修改数据,可以不用接触底层的类,而是修改bean.xml文件。
在我们所有的程序代码中(除测试代码(SimpleTest)之外),并没有出现Spring中的任何组件(即无需导入Spring包)。
客户的运行代码(这里就是我们的SimpleTest类)仅仅面向接口编程,而无需知道实现类的具体名称。同时, 我们可以很简单的通过修改配置文件来切换具体的底层实现类。
上面所说的这些,对于我们的实际开发有何帮助?
Ø 首先,我们的组件并不需要实现框架指定的接口,因此可以轻松的将组件从Spring中脱离,甚至不需要任何修改(这在基于EJB框架实现的应用中是难以想象的)。
Ø 其次,组件间的依赖关系减少,极大改善了代码的可重用性。
使用Spring大大降低了组件之间的耦合,实现了组件真正意义上的即插即用。这也是Spring最具价值的特性之一
Ø 面向接口编程。