spring配置文件或注解中可以设置对象为singleton(单例)或 prototype(多实例)
单例即希望全程使用的对象,常驻内存,常常使用,属性和方法返回值一般不会修改只用于获取;
多实例用于每次调用的返回值和属性值皆会发生变化如传输对象DTO这类天然需要传值并且每次都可能不同的对象实例;
应用场景说明:
多实例:值得一提的是在mvc的框架中使用以往的写法就是action、bo、dao中各自new下一层的对象在类中使用,这里的对象就是多实例的表现,在没有IOC的管理下,这类实例一般直接交给jvm清理,容易出现各种问题;通过bean的生命周期管理,可以更明确地处理这些层层依赖的对象,所以学好IOC是解耦和梳理对象实例的必要过程。
单实例:配置实例:这应该可以覆盖所有单例应用场景,包括 项目使用的字典翻译常量信息、各种数据源连接信息(配合读取配置文件使用)、项目文件目录信息、其他内外部工具类(不包括静态工具类)、统一资源处理类(计数器、资源管理类)、多线程线程池(线程资源统一)等
总结:
多实例的使用场景需要符合业务并行无影响的原则,保证共享数据的时效性并且多条相同业务之间无影响就使用多实例;单实例应用场景其实只有一个,就是保证共享资源的唯一性,如果需要资源共享且共享时刻所有数据需要统一即可使用单例,也可以用强一致性来保证单例但是会牺牲时间,这在非关系型数据库中有所体现。
网友评论