有没有觉得Struts2越来越臃肿?

有没有觉得Spring+Struts2+Hibernate的整合框架启动越来越缓慢?


有没有觉得自己只把Spring作为容器来使用而Spring提供的大部份服务并不会用上白白的浪费启动时间?


想不想有一个框架启动速度飞快?


想不想有一个框架出现的bug可以自己掌握?


想不想有一个框架没有一大段一大段的配置文件?


如果你想的话,来吧!和我一起像个孩子搭积木一样从新考量WEB框架


首先作为几十万的中小型项目,Spring一般用到的功能就是容器,AOP拦截,定时任务调度,事务处理。然而使用Spring这些简单的功能,越又不得不忍受它的缓慢和臃肿。来源于Webwork2的Struts2秉承了Spring慢的一切特点,它摆夺了Webwork2的简单灵活,吸收了菜市场的大杂烩,把一切好玩,好看的,新鲜的都收入囊肿,然后它忘了,我们要的是简单,要的是快速,要的是稳定!


这一切JAVA开发人员已经受够了!


首先无法忍受的是google的 java程序员crazyBob,这位天才程序员创造性的利用java5提供的annocation开发了guice框架,这是一个号称比spring快100倍的小型框架,再也没有XML配置文件,再也没有又臭又长的spring命名风格和继承体系,要了建更多guice框架信息,请访问google.com输入guice.


那么Struts2呢?平心而论,它的开发方式是简单不错的,而且大量的开发人员已经习惯了它。它错在那些鸡肋的拦击器上,弱智的类型转换上面,混乱的验证封装上面。如果让我们选择其它框架比如面向组件的框架T5,这个变化似乎来的激烈了一点。算了吧,我们自己庖丁解牛,一步一步去掉Struts2多于的杂碎吧!


首先需要把我们的新容器guice加入到我们的web应用程序来管理所有的Object,为了达成这个目的,需要修改web.xml,把com.google.inject.servlet.GuiceFilter管理所有的请求(详细代码请看源文件)

接着定义一个接口和实现类

package test;
import com.google.inject.ImplementedBy;
@ImplementedBy(value = HomeServiceImpl.class)

public interface HomeService {
public void show(String id);
}

package test;
import com.google.inject.Singleton;
@Singleton

public class HomeServiceImpl implements HomeService {
public void show(String id) {System.out.println("hello "+id); }

}

这两个元注释都是guice定义的,意义都很明了,就是单列模型。

Action也很简单:

public class HomeAction implements Action {

private String userName;

private HomeService homeService;

public String execute(){

homeService.show(userName);

return SUCCESS;

}

@Inject

public void setHomeService(HomeService homeService) {

this.homeService = homeService;

}

}

和以前唯一不同的是加了一个 @Inject 元注释

启动服务器信息:Server startup in 2946 ms

确实比较快了.

因为blogger写代码确实比较痛苦,省略了改造struts2和其标签的代码,详见源代码

0 Comments:

Post a Comment