关于struts1与struts2的方法中使用StringBuffer与StringBuilder问题
最近公司来了一位牛逼哄哄的人,今天公司开了一次代码规范会议,最后代码优化占了差不多一半,其中有一条:
建议在action中使用StringBuffer进行字符串的封装。
他的理由如下:
1、因为Struts1是线程安全的,Spring会为每个action在每一个请求中创建一个实例(我们的项目的实例是由Spring管理,bean的scope="request"),因此不存在线程安全问题,所以在Struts1的action中可以使用StringBuilder来创建。
2、因为Struts2是线程不安全的,因为struts的action一般不由Spring来管理,因此存在线程安全问题,因此采用线程安全的StringBuffer比较好,因此统一规定使用StringBuffer。
但是据我所知:
1、Struts1是线程非安全的,属于单例模式,但是如果是将变量写在action类的方法内,属于局部变量,因此该变量是无线程安全问题的,因为局部变量本身就是本线程才能访问,因此不管是否用Spring管理,在方法内部都可以使用StringBuilder。
2、Struts2是机制线程安全的,每次访问时会生成新的Action实例,因为也可以使用StringBuilder。
但是由于本人经验欠缺,还望各位指点下Struts1与Struts2内部机制到底是哪种?