Service层的性能优化

本文探讨了在J2EE应用中,Service层的性能优化,特别是Struts2框架下Action和Service的设计模式选择。通过实验对比非单例模式、懒汉双重锁定单例模式和饿汉单例模式在处理RESTful请求时的响应时间,展示不同模式对性能的影响。实验结果显示,饿汉单例模式在结合二级缓存后,能显著提升响应速度。
摘要由CSDN通过智能技术生成

很多学J2EE方向的同学都接触过S2SH,即传统的三大框架,学习这三个经典技术的重点就是挖原理和细节,慢慢地我们就能形成一套思想,以帮助理解其他新框架和新技术。学习技术本身并不难,设计技术方案才是难点,为什么要这么设计,这样设计的哲学依据又在哪?


不难发现:Struts2中控制层的action是多例的,在action层一般引用了逻辑层的单例service,而在逻辑层中又引用了单例的dao。因为作为控制层,action必须接受前端传递的参数,而Struts2又基于拦截器思想,建立HTTP请求后要经由复杂的拦截器才能到达控制层进行处理。这些参数就是action中的成员变量,如果并发请求action而action又是单例的,这不是会发生非线程安全么?而service顶多就只有dao的引用作为成员变量,dao本身也只有对操作数据库的包装类的引用充当成员变量,所以没有涉及到非线程安全,即本身就是线程安全。所以我们spring框架在默认情况下的bean都是单例模式。每一次访问方法进行处理都要new对象和回收对象,浪费系统资源,而单例模式就是可以解决这个问题。

以下的实验是在网络环境不怎么好的情况下进行的,把时长拉得更加明显。
非单例模式的情况:
controller层(Jersey框架,基于REST风格的Web Service)

@GET
@Path("history_station_user")
@Produces(MediaType.APPLICATION_JSON)
public String getHistoryStationUserInfo(
        @QueryParam("area_list") @DefaultValue("null") String areaList,
        @QueryParam("year_month") @DefaultValue("null") String yearMonth) {
    if (areaList.equals("null") || areaList.length() == <
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值