在实际项目中,我们通常会把controller、service、dao层中的class交给spring管理,而实体类没有交给spring管理。原因如下:
在面向对象开发中,类一般有两种,一种是功能类的,一种是数据类。
-
功能类主要完成一些业务操作,比如service类,里面有大量实现的方法,这些方法无状态,可以复用的。我们将其注入到spring中后,交给spring管理bean的生命周期,加上spring默认是单例模式,因此在程序运行周期内,这些class只会被实例化一次。
-
数据类主要是存储数据,比如pojo类,当数据提交、组装等步骤后,调用功能类的方法去操作这些数据,完成相应的功能。我们几乎不会将pojo类交给spring管理,因为我们无法确定这些类的bean的生命周期。对于实体类中的字段,只有在赋值的情况下才具有价值,它是有状态的,我们可能处处会修改,赋予相应的值,是不可以复用的,因此没有必要注入到spring中。因此还不如在需要的时候手动实例化。
总结:
1、由spring管理并注入的类是可以大量重复使用的,没有状态。
2、实体类需要赋予数据才有意义,它是有状态的
3、一个实体类可对应多条数据,如果交给spring实例化,则需要针对所有的数据实例化,会导致程序臃肿。