Spring Boot Controller继承的线程安全

时间:2018-11-08 15:54:25

标签: spring-boot inheritance thread-safety

我正在使用Spring Boot编写API,并且我有一个抽象控制器来保存多个控制器之间的共享逻辑。现在,我想添加一个warning字段:

public abstract class BaseController<T> {
   public List<String> warnings;

    @RequestMapping(method = POST)
    public Response create(HttpServletRequest request,HttpServletResponse response) {
      warnings = new ArrayList<>();
      if (something bad from T) {
        warning.add("bad thing happens");
      }
      return createRespone(warnings);
}

({createReponse被用来创建自定义响应)

我从中继承了几个不同的控制器

@RestController
@RequestMapping("/{area}/blah")
public class BlahController extends BaseController<Blah> {
}

对于warning字段,它将被几个不同的子控制器共享,还是仅一个实例存在?如果controller Acontroller B都继承自BaseController并试图修改警告,那么线程安全吗?

1 个答案:

答案 0 :(得分:0)

警告字段未共享。您的代码等效于:

#!/usr/bin/env sh

var="$(cat /dev/stdin)"
file=$(mktemp)
echo "$var" > "$file"

ip_address=$(head -1 "$file" | rev | cut -d ' ' -f1 | rev)
last_line=$(tail -1 "$file" | sed -E "s,^\|_, ,")

printf "%s%s\n" "$ip_address" "$last_line"
rm "$file"

控制器中的状态违反REST概念。