首页 > 代码库 > IOC和DI
IOC和DI
IOC 开发基本步骤:
1.导jar包
2.编写实体类
3.编写XML文件
4.启动Spring容器
5.通过Spring容器来获取对象,并通过对象执行实际操作
Spring 获取对象的方式:(2种)
1.通过id
-- getBean("bean中的id值");
2.通过class
-- getBean("xx.class");
-- 此种方法最终还是通过id值来获取对象。使用class类型可能会出现一对多的现象。容易出现异常。
Spring 创建对象的方式:(4种)
1.默认的无参构造方法创建对象;
-- 底层是调用无参构造函数,通过Java中的反射机制来创建对象。
2.Spring工厂创建对象:
-- 需要实现FactoryBean<T>接口,并实现其中的方法
3.静态工厂创建对象:
-- 用来创建一些不能直接创建的类,比如abstract或者interface等。
-- 要求必须在方法上加上 static 关键字。在XML配置Bean标签中需要添加factory-method属性,该属性指向实现的方法。
-- 工厂类不会被实例化。
-- 在运行时,若没有出现static关键字,必然会有异常出现。
4.实例工厂创建对象:
-- 先创建实例工厂对象。
-- 再通过实力工厂对象调出对象中的方法。factory-Bean="实例工厂的id" factory-method="方法名"
Spring中对象的单例和多例
scope="singleton" -- 设为单列
scope="protoType" -- 设为多例
单例:在内存中对象有且只有一份
发现:
在spring容器中,默认创建的对象都是单例的。
在spring容器中默认使用单例对象便于维护。
注意:
如果对象是多例对象.spring容器只负责对象的创建,不负责维护.具体的生命周期由使用者决定.
如果对象是单例的,那么Spring容器维护它的生命周期,生命周期基本和容器一致.
懒加载:
在对象被使用时再创建对象,而不是传统的提前创建对象,这样大大浪费资源。
使用规则:在配置对象的Bean标签中添加一个 lazy-init 属性。
-- 该属性有三个值:lazy-init="default/false/true"; 在没有添加该属性时就是default或false值。
-- 若需要在所有的对象中使用懒加载则在Beans父标签最后添加该属性。lazy-init="true"
注意:在lazy-init和scope一起使用时,若scope设为了多例时,lazy-init的值不管是false还是true懒加载都会生效。
因为在多例时,对象就是在调用时再去创建对象并覆盖原先的对象。
自定义的初始化和销毁方法:
整个spring中对象的简单生命周期划分为4部分(整个spring容器中对象的生命周期经历了12个过程)
1.对象实例化
2.调用初始化方法
3.对象完成特定的操作
4.对象销毁.
Spring中的DI:表示依赖注入.
依赖注入的方式:
1.set方法注入 必须要有set方法
2.构造方法注入
Spring中IOC和DI的意义:
1.能够将程序中间层对象的创建过程简化了,都交给spring容器来完成.
2.Spring中使用IOC和DI能够将软件中的耦合性降低.
IOC和DI