spring 为什么service 和dao 默认是单列模式
提高性能,在ioc生成单列的时候会有个内部维护的map,下次使用就直接取出
Spring的singleton是容器级的,我们一般说的singleton模式是JVM级的。所以singleton模式中,singleton的 class在整个JVM中只有一个instance,Spring的Bean,你可以一个class配置多个Bean,这个class就有了多个 instance。这个singleton是指在spring容器中,这个Bean是单实例的,是线程共享的。所以要求这些类都是线程安全的。也就是说,不能出现修改Bean属性的方法,当然除了设值得那些setter。只要满足线程安全,这些bean都可以用singleton。而且我们在绝大多数使用上,也是这样用的,包括dao,service。
在spring中 service 和dao 一般也是线程安全的用到了ThreadLoacl来实现
在structs2中 action 的实现 一般交给spring来实现,所以一般用原型模式来实现。因为一般在方法中 都会存在类级变量的修改,如
类级别 private Bank bank 在不同方法中修改
如果用singleton 这样可能容易造成线程不安全 (不知道这个解释有没有对不对,大家可以板砖)
杭州做java的朋友可以加我的群 一块学习 生活 互相介绍工作 140533957
提高性能,在ioc生成单列的时候会有个内部维护的map,下次使用就直接取出
Spring的singleton是容器级的,我们一般说的singleton模式是JVM级的。所以singleton模式中,singleton的 class在整个JVM中只有一个instance,Spring的Bean,你可以一个class配置多个Bean,这个class就有了多个 instance。这个singleton是指在spring容器中,这个Bean是单实例的,是线程共享的。所以要求这些类都是线程安全的。也就是说,不能出现修改Bean属性的方法,当然除了设值得那些setter。只要满足线程安全,这些bean都可以用singleton。而且我们在绝大多数使用上,也是这样用的,包括dao,service。
在spring中 service 和dao 一般也是线程安全的用到了ThreadLoacl来实现
在structs2中 action 的实现 一般交给spring来实现,所以一般用原型模式来实现。因为一般在方法中 都会存在类级变量的修改,如
类级别 private Bank bank 在不同方法中修改
如果用singleton 这样可能容易造成线程不安全 (不知道这个解释有没有对不对,大家可以板砖)
杭州做java的朋友可以加我的群 一块学习 生活 互相介绍工作 140533957