@Controller @Service @Repository的UnderStanding

时间:2016-09-13 20:41:46

标签: spring spring-mvc

我对依赖注入有疑问,假设我的控制器,服务,dao都是单例,所以通常当我们创建控制器时,我们将服务注入该类的实例变量,但是如果我们的控制器是单元模式则根据单例模式无状态然后只有我们不会遇到任何并发问题,但在这里我们声明服务依赖,所以它不应该是无状态所以我们必须处理同步?

请清楚这个疑问,因为我是初学者,所以我希望自然能够怀疑这个疑问,我不知道我是否完全错了。请帮忙。

3 个答案:

答案 0 :(得分:0)

默认情况下,Spring中的所有bean都是Singleton。这包括任何@Controller@Service@Repository和其他,以及任何xml定义的bean。

您可以阅读thisthis

来自Java basic variable tutorial

  

局部变量类似于对象如何在字段中存储其状态,a   方法通常会将其临时状态存储在局部变量中。该   声明局部变量的语法类似于声明字段   (例如,int count = 0;)。没有特殊的关键字指定   变量为本地变量;这种决心完全来自于   声明变量的位置 - 介于...之间   打开和关闭方法的大括号。因此,局部变量是   仅对声明它们的方法可见;他们不是   可以从班上其他人那里获得。

答案 1 :(得分:0)

如果您的服务和控制器是无状态的,可以将其中一个注入另一个。

您不应声明任何在这些类中保持状态的变量。最终变量没问题。

如果所有操作都是在方法中定义的,并且他们不使用类的任何变量,那么您正在进行的依赖注入是完全安全的。

答案 2 :(得分:0)

这就是您在声明依赖服务时需要使用@Autowired的原因。有效地将初始化过程交给Spring框架而不是自己实例化它。由于Spring只有无状态bean,你可以将一个无状态单例注入另一个无状态单例,因此不需要手动管理线程。