有没有觉得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和其标签的代码,详见源代码
Labels: 技术