spring是单例模式,我们常将controller、service、dao中的类交给容器管理,是因为这些类在程序运行的整个周期中只需要被实例化一次。这些类一般都不具有一些状态信息,是无状态的,且生命周期与程序的生命周期相同,可称之为“功能类”。
而实体类是要保存状态信息的,实体类的生命周期往往很短且不可被共享的,所以实体类往往都不交给容器来进行管理,可称之为“状态类”。
我们可以为银行设计一款系统,给用户定义一个用户信息类(UserInfo),取钱、存钱等操作在controller、service、dao定义一些功能类(OperController...)。
不同用户来取钱,UserInfo存的信息是不同的,需要建立不同的UserInfo实例来存储信息,但是不同用户取钱的操作是相同的,所以可以使用相同实例的OperController来进行业务处理。
这里的UserInfo是有状态的、有特定生命周期的、不可被共享的,所以不适合交给容器管理。
OperController是无状态的、生命周期为程序的运行周期、可被共享的,适合交给容器管理。