本人觉得板主对SPRING有偏激的看法,本人在项目中正好在使用SPRING,其实由于SPRING的使用,大大提高了开发和测试效率.关于THREAD SAFE问题,我觉得SERVLET是一个很好的例子.正因为SERVLET是一个SINGLE INSTANCE ,所以其实际运行效率很高.
在使用SERVLET的过程 中,所有INSTANCE VARIABLE不是TRHEAD SAFE的,换言之,在实际应用中,应避开使用INSTANCE VARIABLE. 用SPRING 是一个道理,所有BIZ TIE的COMPOMNENT.都是一个SERVICE,在RUNTIME时应该是一个INSTANCE,MULTI THREAD, 而且不用INSTANCE VARIABLE,这样运行效率其实比INSTANCE POOL要快.
由于所有DEPENDENCY都来由SPRING来WIRE.代码非常干净.
另外对于每个METHOD,我实想不通,板主为什么要SYNCHRONIZE ? 难道这样做就能保证同时只有一个用户执行这个METHOD? 在CLUSTER的情况下,是没有任何意义的.另外我要说明的是SINGLETON并不是SINGLE INSTANCE,SINGLETON是指在一个WORKSPACE中的SINGLE INSTANCE,这个WORKSPACE可以是一个JVM,也可以同时多个JVM. 如果想限定该METHOD一次只允许一个用户访问的话,应该在一个CENTRAL RESOURCE(如DATABASE)使用SEMPHORE机制.
另外EJB和SPRING并没有任何对立的地方.反而两个配合使用,双方更可取长补短.
在实际EJB开发过程中,EJB(SESSION STATELESS BEAN)应该作为一个WRAPPER出现, 而所有的BIZ LOGIC COMPONENT 都应该做成pojo,这样做,一来便于测试,二来它是一个通用的POJO.可以通过各种WRAPPER,将其包装成你需要的东西,通过EJB的包装,POJO就摇身一变成为EJB.如果它被WEBSERVICE包装,它就变成 了WEBSERVICE.
在一个项目中,可以只要一个SESSION BEAN.而且是通用的,其它的就是POJO.
相反SPRING作为一个ORGANIZER出现,它负责各种不同的COMPONENT组关起来.加上不同的DECORATOR 如INTERCEPTOR,TRANSACTION等.
g迎大家共同!