前言:
在笔者刚刚接触web开发的初期,非常喜欢将一些成员变量定义在控制层中,然后就在控制层中进行一些简单的业务逻辑处理,再返回给前端,因为这样的方式简单快捷,并且由于业务逻辑非常简单,比如需要统计两个部门的人数总和,就会先获取第一个部门的人数总和,然后用一个成员变量int sum1表示,再获取另一个部门的人数总和,用成员变量sum2表示,再用 int sum3 = sum1 + sum2,最后 return sum3;
问题:
众所周知,@Controller的bean的作用域是singleton的,也就是说在整个ioc容器当中只有一个实例,控制层通常是多线程环境下的,多个请求可能同时操作同一个控制器实例。如果在控制层中定义成员变量,则多个请求会共享这些成员变量,可能导致数据混乱或不一致性。
另外在控制层中定义成员变量可能会导致对内存的占用增加。因为每个请求都会创建一个控制器实例,如果在控制层中定义了成员变量,那么每个实例都会占用额外的内存空间来存储这些成员变量,从而增加了内存的使用量。
最后,如果业务变更,需求变得更加复杂,需要的变量也会增多,那么到时候代码的可读性将会变得很低,并且可能会导致数据在不同方法之间传递和共享,增加了程序的复杂性和bug的可能性。
解决方法:
最简单的解决方法就是换成局部变量,比如:
@Controller public class MyController { private int count = 0; @RequestMapping("/hello") public String hello(Model model) { count++; model.addAttribute("count", count); return "hello"; } }
count就有并发问题,改成:
@Controller public class MyController { @RequestMapping("/hello") public String hello(Model model) { int count = 0; // 在方法内部定义局部变量 count++; model.addAttribute("count", count); return "hello"; } }
标签:count,变量,层中,成员,hello,定义 From: https://www.cnblogs.com/xialang/p/17740890.html