Spring IOC / DI(工厂模式)
工厂设计模式总结:
- 核心技术:反射
- 好处:解耦和
- 面向接口编程
通过面向接口编程的思想,加载配置文件得到类全限定名,通过反射机制,创建对象。
Spring工厂的初始化时机
需求:tomcat启动就加载Spring工厂
ServletContext的监听器在tomcat启动的时候,就执行。
IOC(Inverse Of Controller 反转控制)
- 概念: 将对象创建的权利,转义到Spring的工厂中,解耦合,减少代码的冗余,提高开发效率, 提高可维护性。
-
核心内容:
工厂对象:ApplicationContext(接口) ClassPathXmlApplicationContext(实现类)
配置文件:application.xml
DI (Dependency Injection 依赖注入)
依赖:对象的属性。 // 注入:属性赋值。
① Spring的属性注入(Set注入)
② Spring的属性注入(构造注入)
③ Spring管理对象的生命周期
-
控制对象的创建次数:
Singleton: 这个简单对象只会被创建一次
Prototype: 这个简单对象每一次都会被创建新的对象
总结: 只创建一次的: SqlSessionFactory、XXXService、XXXDao
每一次都创建新的: Connection、SqlSession、XXXAction -
创建时机: 初始化Spring工厂对象,则会将singleton(只创建一次)的对象创建好(饿汉式)。
创建一个的优势:减少内存的占用,减少对象创建的消耗时间,减少CPU的资源的消耗。
对象创建:jvm分配内存,初始化属性,调用构造方法,完成对象创建。 -
创建对象个数的原则:
创建一个的原则:无状态对象(没有存储数据功能的特性),重量级资源对象(占内存,创建耗时,全局应用只需要一个就够的。例:ServeltContext(Application)、SqlSessionFactory)
创建多个的原则:有状态对象(有存储数据功能的特性),每个操作都独有的(例:Struts2的Action、Connection(数据库连接)、SqlSession(MyBatis的数据库连接技术)) -
注意: 所有的生命周期操作,都必须保证操作的对象 scope=”singlton”
如果scope=”prototype”,那么对象的创建就是懒汉式(现用现创建)
而且也不会有生命周期方法
下一篇:Spring的AOP代理