ITPub博客

首页 > 应用开发 > IT综合 > 学习Spring 开发指南------Spring初探

学习Spring 开发指南------Spring初探

原创 IT综合 作者:abcbbc 时间:2007-05-09 16:17:09 0 删除 编辑

Ø 首先,我们的组件并不需要实现框架指定的接口,因此可以轻松的将组件从Spring中脱离,甚
至不需要任何修改(这在基于EJB框架实现的应用中是难以想象的)。
Ø 其次,组件间的依赖关系减少,极大改善了代码的可重用性。

[@more@]

applicationContext.xml :

http://www.springframework.org/dtd/spring-beans.dtd">

Spring Quick Start
class="net.xiaxin.spring.qs.UpperAction">

HeLLo


testQuickStart.java:
package net.xiaxin.spring.qs;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class testQuickStart {
public void aa() {
ApplicationContext ctx=new
FileSystemXmlApplicationContext("applicationContext.xml");
Action action = (Action) ctx.getBean("TheAction");
System.out.println(action.execute("Rod Johnson"));
}
public static void main(String[]args)
{
testQuickStart a = new testQuickStart();
a.aa();
}
}


Action.java
package net.xiaxin.spring.qs;
public interface Action {
public String execute(String str);
}

UpperAction.java package net.xiaxin.spring.qs;
public class UpperAction implements Action {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String string) {
message = string;
}
public String execute(String str) {
return (getMessage() + str).toUpperCase();
}
}


运行测试代码,我们看到控制台输出:
HELLO ROD JOHNSON
Spring的依赖注入机制,可以在运行期为组件配置所需资源,而无需在编写组件代码时就加以
指定,从而在相当程度上降低了组件之间的耦合。
上面的例子中,我们通过Spring,在运行期动态将字符串 “HeLLo” 注入到Action实现类的
Message属性中。

仔细观察一下上面的代码,可以看到:
1. 我们的所有程序代码中(除测试代码之外),并没有出现Spring中的任何组件。
2. UpperAction和LowerAction的Message属性均由Spring通过读取配置文件(bean.xml)动态设置。
3. 客户代码(这里就是我们的测试代码)仅仅面向接口编程,而无需知道实现类的具体名称。同时,
我们可以很简单的通过修改配置文件来切换具体的底层实现类。

传统编码过程中,引入一个接口,往往也意味着同时要引入一个Factory类,也许还有一个额外的配置文
件及其读写代码
传统编码:
首先,我们必须编写一个配置文件读取类,以实现Message属性的可配置化。
其次,得有一个Factory模式的实现,并结合配置文件的读写完成Action的动态加载。
config.properties:
TheAction=net.xiaxin.spring.qs.UpperAction
TheAction_msg=HeLLo

ActionFactory:
package net.xiaxin.spring.qs;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Properties;

import org.apache.commons.beanutils.BeanUtils;

public class ActionFactory{
public static Action getAction(String actionName){
Properties pro = new Properties();
try {
pro.load(new FileInputStream("config.properties"));
String actionImplName =
(String)pro.get(actionName);
String actionMessage =
(String)pro.get(actionName+"_msg");
Object obj =
Class.forName(actionImplName).newInstance();
// BeanUtils是Apache Commons BeanUtils提供的辅助类
BeanUtils.setProperty(obj,"message",actionMessage);
return (Action)obj;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
}

testFactory:
package net.xiaxin.spring.qs;
public class testFactory {

public static void main(String[] args) {

Action action = ActionFactory.getAction("TheAction");
System.out.println(action.execute("Rod Johnson"));

}

}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/219138/viewspace-914193/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-09-07

  • 博文量
    56
  • 访问量
    699645