嗯,我有三层来自控制器-
代码如下所示:
用户控制器。Java语言
@Controller
@RequestMapping("/users")
public class UserController extends ExceptionExtension {
@Autowired
private IUserService userService;
@RequestMapping(value = { "/update", "/update/" }, method = RequestMethod.GET)
public String updateUser(@RequestParam("email") String eMail, ModelMap model)
throws Exception {
if (eMail.isEmpty() || eMail == null) {
throw new ArgumentIsEmptyException("Required String parameter 'email' is empty");
} else {
UserModel userModel = userService.setUser(eMail);
if (userModel != null) {
model.put("roleList", userService.setRoleList());
model.put("title", "Update Existing User");
model.put("post", "/users/post/update");
model.put("userForm", userModel);
return "users.update";
} else {
model.put("title", "Update Existing User");
model.put("result", "<font color='red'><u>" + eMail + "</u> does not exist in the database.</font>");
model.put("flag", "Error");
return "users.result";
}
}
}
}
用户服务。Java语言
public class UserService implements IUserService {
@Autowired
private IUserManager userManager;
public UserModel setUser(String eMail) {
UserModel userModel = new UserModel();
Entity userEntity = userManager.getUser(eMail);
if (userEntity != null) {
userModel.setEMail(eMail);
userModel.setRole(userEntity.getProperty("role").toString());
userModel.setEnable((Boolean)userEntity.getProperty("enable"));
return userModel;
} else {
return null;
}
}
}
例如,用户A和用户B同时运行相同的url,但参数不同
用户请求=
由于控制器是单例的,那么用户A的电子邮件变量是否会与用户B的电子邮件变量重叠,反之亦然?
我发现很难理解Singleton Thread-Safe在这种情况下是如何工作的。我的@Service和@Repository是否应该声明为@Scope(“原型”),以便内部方法变量与新实例隔离?
====
使用范围(“请求”)到我的@服务层,我点击了这个错误消息:/
3328[主]错误组织。springframework。网状物上下文ContextLoader-上下文初始化失败。springframework。豆。工厂BeanCreationException:创建名为“roleController”的bean时出错:自动连线依赖项的注入失败;嵌套异常为org。springframework。豆。工厂BeanCreationException:无法自动关联字段:private com。公司仪表板服务IRoleService公司。公司仪表板控制器。角色控制器。角色服务;嵌套异常为org。springframework。豆。工厂BeanCreationException:创建名为“roleService”的bean时出错:作用域“request”对于当前线程不是活动的;如果您打算从单例引用这个bean,请考虑为它定义一个作用域代理;嵌套异常为java。lang.IllegalStateException:未找到线程绑定请求:您是在实际web请求之外引用请求属性,还是在最初接收线程之外处理请求?如果您实际上在web请求中操作,并且仍然收到此消息,那么您的代码可能在DispatcherServlet/DispatcherPortlet之外运行:在这种情况下,请使用RequestContextListener或RequestContextFilter公开当前请求。
如果您像注释中建议的那样制作任何层范围:原型,那么您只是将问题再次移动到下面的层。
您需要决定您希望事务划分的位置。通常,这是在对服务的调用级别完成的。Spring可以为您处理。
控制器、服务和存储库通常应该以无状态的方式实现,也就是说,这些类没有方法修改的任何实例变量。否则你将很容易受到比赛条件的影响。最后,您的数据存储必须支持事务的使用。
您使用Google AppEngine数据存储。与任何RDBMS不同,它对事务有非常具体的方法。要从Java应用程序与appEngine交谈,我建议使用“客观”。首先阅读[关于它的概念](以及底层BigTable数据存储的概念1)。
这里,线程安全取决于作用域为singleton时用户服务的内部锁定
这就是最终发生的事情=
或
将范围设置为请求。
在这种情况下,将为每个请求分配一个新bean,由于线程限制,整个操作是线程安全的。提供了在IUserSpace中相应的代码
问题内容: servlet是线程安全的吗?例如,如果我打开5个不同的浏览器并向容器中的一个servlet发送请求,它是否仍然是线程安全的,我特别指的是方法 问题答案: 您的问题可以归结为: 正在从同一对象线程safe上的多个线程调用方法 。答案是: 取决于 。如果您的对象(让它成为servlet)是无状态的或仅具有字段,则这是完全线程安全的。局部变量和参数是线程局部的(驻留在堆栈上,而不是堆上)。
我有一个service方法,其中我通过ID从数据库请求一个实体。如果实体具有属性,我将其设置为true并执行某些操作。如果它只返回。 现在,如果同时有多个具有相同的请求,则该方法将不再一致,因为例如,第一个请求使用接收,因此它会做“一些事情”,如果第二个请求在第一个请求使用保存费用之前来到该方法,则即使第一个请求已经保存了费用,它也会做“一些事情”。这是一个正确的结论吗? 为了确保一次只能有一个请
问题内容: 我对线程安全性有疑问。据我所知,SimpleDateFormat不是线程安全的。我想知道如果在spring控制器中以以下方式使用它会产生什么影响: 稍后在我的控制器功能中,我将其如下使用: 然后将calcDate添加到我的模型对象中,并返回ModelAndView。 那么用这种方式我会看到什么样的问题呢?是否只需删除static关键字即可解决任何问题,因为每个线程将使用其自己的date
我正在使用 okHttp 库来管理我的网页托管连接。所以我的问题是我不确定okHttp是否是线程安全的。 我的意思是,如果发送一些数据,同时服务器应用程序向我的客户端应用程序发送数据,okHttp应该接收这些数据,它会抛出异常吗?
问题内容: HttpUrlConnection线程安全吗?即,如果我有一个连接到服务器的HttpConnection实例,并且该实例被不同的线程使用(例如,尝试同时发送POST),HttpUrlConnection将如何处理这种情况?a)他们将串行发送POST,还是b)第一个线程发送POST,获取响应,然后第二个线程发送POST?如果它们以串行方式发送POST,则意味着到同一tcp连接的多个活动P
假设我有一个Executors静态工厂方法的ExecutorService实例。 如果我从某个线程提交了一个调用,其中RetVal不是线程安全的本地实例化对象,那么当我从同一个线程获得()它时,我需要担心retvals的完整性吗?人们说局部变量是线程安全的,但我不确定当您返回一个本地实例化的对象并从其他线程接收它时,它是否适用。 下面是我的定制实现,我只是为了测试。您可以忽略EType枚举。