APP直接依赖资源,这样APP会无法独立,耦合度太强
IOC如图所示:APP将直接寻找资源的权利交给工厂,通过工厂对象进行资源的整合,以此减少程序间的耦合度
IOC的概念: 控制反转,把创建对象的权利交给框架,是框架的重要特征, 并非面向对象编程的专用术语,它包括依赖注入(Dependency Injection) 和依赖查找(Dependency Lookup) IOC作用: 削减计算机程序的耦合度(尽量减少我们代码中的依赖关系)
使用Spring的IOC解决程序耦合(IOC的唯一作用)
目的:使用spring解决依赖关系,并不是正真的要CRUD,所以没必要写实体类,用模拟即可。 并且使用的是java工程,并非javaWeb, 也没必要写JavaBean 步骤: 1.准备spring的依赖开发包(jar包) 2.创建配置文件,导入xml 约束 3.把对象的创建交给spring来管理
jcl是阿帕奇的日志,beans spel context core是核心容器相关的jar
aop是注解相关的jar
CoreContainer是一个Map,类似BeanFactory中,存储单例对象的Map
步骤1 准备spring的依赖开发包(jar包):
步骤2 创建配置文件,导入xml 约束:
步骤3 把对象的创建交给spring来管理:
获取核心容器ApplicationContext,根据id获取Bean对象
ApplicationContext的三个常用实现类 ClassPathXmlApplicationContext:它可以加载类路径下的配置文件, 配置文件必须在类路径下,不在的加载不了 FileSystemXmlApplicationContext:可以加载磁盘任意路径下的 有访问权限的配置文件 AnnotationConfigApplication:用于读取注解创建容器
IAccountService与IAccountDao两个的实现类的打印地址
ApplicationContext与BeanFactory的区别:
ApplicationContext:单例对象适用,因为只创建一个对象 (也可以在配置文件中选用多例的策略创建对象) 在构建核心容器时,创建对象采取的策略是采用立即加载的方式, 只要一读取完配置文件,马上就创建配置文件中的配置的对象
BeanFactory:多例对象适用,因为对象不一样, 所以什么时候用什么时候创建 在创建核心容器时候,采取的是延迟加载的方式,即什么时候根据 id获取对象,什么时候创建对象
spring对bean的管理细节
1.创建bean的三种方式
2.bean对象的作用范围
3.bean对象的生命周期
1.Bean创建的第一种方式:
使用默认构造函数创建在spring的配置文件中使用bean标签, 配以id和class属性后,且没有其他属性和标签时。 采用的就是默认构造函数创建bean对象, 此时如果类中没有默认构造函数,则对象无法创建。
xml配置:
类的代码(含默认构造):对象创建,代码正常运行
类的代码(不含默认构造):对象无法创建,程序报错
2.Bean创建的第二种方式:
使用普通工厂中的方法创建对象(使用某个类中的方法创建对象, 并存入spring容器)
xml配置:
类中的代码:
3.Bean创建的第三种方式:
xml配置:
类中的代码:
Bean的作用范围:
bean标签的scope属性: 作用:用于指定bean的作用范围 取值:常用的就是单例的和多例的 singleton:创建单例对象(默认值) prototype:创建多例对象 request:作用于web应用的请求范围 session:作用于web应用的会话范围 global-session:作用于集群环境的会话范围(全局 会话范围),不是集群环境时,它就是session
集群环境(多台服务器)中的global-session
单例配置及代码如下:
多例配置及代码如下:
Bean对象的生命周期
单例对象: 出生:当容器创建时,对象出生 存活:只要容器还在,对象一直活着 死亡:容器销毁,对象销毁 总结:单例对象的生命周期和容器相同
配置及代码如下:
多例对象(懒加载): 出生:当我们使用对象时候,spring框架为我们创建 存活:对象使用过程中就活着 死亡:当对象长时间不用,且没有别的 对象引用时,由Java的垃圾回收器回收
代码:单例模式的代码配置中,更改scope为prototype
依赖注入:
依赖注入:Dependency Injection IOC:降低程序的耦合(依赖关系) 依赖关系的管理: 1.交给spring来维护 2.在当前类需要用到其他类的对象,由spring为我们 提供,我们只需要在配置文件中说明。 3.依赖关系的维护:就称之为依赖注入 4.依赖注入: 能注入的数据有3类: 基本类型和String 其他bean类型(在配置文件中或注解配置过的bean) 复杂类型/集合类型 注入的方式:有三种 一:使用构造函数提供 二:使用set方法提供 三:使用注解提供
方式一,使用构造函数提供代码如下:
注:下方代码中没有了默认构造,在配置文件 中创建bean放入spring容器之前,必须 先将参数的值注入bean对象
方式二,使用set方法提供代码如下:



