快速业务通道

Spring中反向控制和面向切面编程的应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
定义Action接口,并为其定义一个execute方法,以完成目标逻辑。多年前,GoF在《Design Pattern:Elements of Reusable Object-Oriented Software》一书中提出“Programming to an Interface,not an implementation”的原则,这里首先将业务对象抽象成接口,正是为了实施这个原则。

(2)类UpperAction实现Action接口,在此类中,定义一个String型的域message,并提供相应的setter和getter方法,实现的execute方法如下:

public String execute (String str) {

return (getMessage () + str).toUpperCase () ;

}

(3)编写Spring配置文件(bean.xml)

<beans> <bean id="TheAction" class="net.chen.spring.qs.UpperAction"> <property name="message"> <value>HeLLo</value> </property> </bean> </beans>

Spring中反向控制和面向切面编程的应用(2)

时间:2011-01-27

(4)测试代码

public void testQuickStart () {   ApplicationContext ctx=new   FileSystemXmlApplicationContext ("bean.xml");   Action a= (Action) ctx.getBean ("TheAction");   System.out.println (a. execute ("Rod Johnson")); }

上面的测试代码中,我们根据"bean.xml"创建了一个ApplicationContext实例,并从此实例中获取我们所需的Action实现,运行测试代码,我们看到控制台输出:

……

HELLO ROD JOHNSON

仔细观察一下上面的代码,可以看到:

(1)我们的组件并不需要实现框架指定的接口,因此可以轻松的将组件从Spring中脱离,甚至不需要任何修改,这在基于EJB框架实现的应用中是难以想象的。

(2)组件间的依赖关系减少,极大改善了代码的可重用性。Spring的依赖注入机制,可以在运行期为组件配置所需资源,而无需在编写组件代码时就加以指定,从而在相当程度上降低了组件之间的耦合。

Spring给我们带来了如此这般的好处,那么,反过来,让我们试想一下,如果不使用Spring框架,回到我们传统的编码模式,情况会是怎样呢?

首先,我们必须编写一个配置文件读取类,以实现Message属性的可配置化。

其次,得有一个Factory模式的实现,并结合配置文件的读写完成Action的动态加载。于是,我们实现了一个ActionFactory来实现这个功能:

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.setProperty(obj,"message",actionMessage);    return (Action) obj;   } catch (FileNotFoundException e) {    ……   } }

配置文件则采用properties文件形式如下所示:

TheAction=net.chen.spring.qs.UpperAction

TheAction_msg=HeLLo

测试代码也作相应修改。现在不论实现的好坏,总之通过上面新增的多行代码,终于实现了类似的功能。如果现在有了一个新的需求,这样这个ActionFactory每次都新建一个类的实例,显然这对系统性能不利,考虑到我们的两个Action都是线程安全的,修改一下ActionFactory,保持系统中只有一个Action实例供其它线程调用。另外Action对象创建后,需要做一些初始化工作。修改一下ActionFactory,使其在创建Action实例之后,随即就调用Action.in

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号