* 解耦:降低程序之间的依赖关系,无法策底清除
* 原则:编译期不依赖,运行时才依赖
* 工厂模式解耦
* Bean:在计算机英语中有可重用组件的含义
* JavaBean:用java语言编写的可重用组件 javabean > 实体类
* web工厂一旦部署,相对路径src就用不了了,因为src路径就没有了。
* resource文件下的文件项目部署后,会在类的根路径下
* ApplicationContext的三个常用实现类:
ClassPathApplicationContext:它可以加载类路径下的配置文件,要求 配置文件必须在类路径下。项目发布之后resource文件夹下面的就是类路径根目录
FileSystemApplicationContext:它可以加载磁盘任意路径下的配置文件,前提是 必须有访问权限。
AnnotationConfigApplicationContext:它是用于读取注解创建容器的:
***全注解配置spring时,获取容器使用。
ApplicationContext ac = new AnnotationConfigApplicationContext(自定义取代xml的配置类.class)
* 核心容器两个接口的问题:
ApplicationContext: 它在构架核心容器的时候,创建对象采取的是立即加载的方式,也就是:只要已读取完配置文件,马上就创建配置文件中的对象。
BeanFactory:它在构架核心容器时,是采用延迟加载的,也就是,什么时候根据id获取对象,什么时候才是真正的创建对象
* 实际开发中,要根据实际情况 选择 不同的时间点来创建
单例对象适合:ApplicationContext * 常用
多例对象适合:BeanFactory
* spring中创建bean的三种方式:
1. 在主配置文件中石油bean标签,配以id和class属性,*** 且没有其他属性和标签时,采用的就是默认构造函数(空参构造)创建对象,如果没有默认构造函数,无法创建,甚至配置文件都会红线提示报错。
<bean id="a" class="xx.xx.xx.A"></bean>
2. (引入其他jar包的*方法拿取对象时。源码无法修改以提供默认构造函数)
a. 先获取jar包中的类 <bean id="a" class="xx.xx.xx.A"></bean>
b. 在根据上面的id获取它的方法提供的对象:<bean id="b" factory-bean="a" factory-method="getB"></bean>
3. 引入其他jar包中类的静态方法获取对象:
<bean id="b" class="xx.xx.xx.A" factory-method="getB"></bean>
* bean标签的作用范围:bean标签的scope属性:指定bean的作用范围
取值:
singleton:(默认值)单例的 * 立即创建
propertype:多利的 * 延迟创建
request:作用于web应用的请求范围
session:作用于web应有的额回话返回
global-session:作用于集群环境的回话范围(全局回话范围),当不是集群回话时,它就是session
* bean标签的两个属性:
(* 选择性配置)
init-mrthod:初始化的会执行的方法
destroy-method: 对象销毁会执行的方法
* bean对象的生命周期:
单例:当容器创建时出生,只要容器还在对象就或者,容器销毁对象就销毁了。
多例:当使用对象的时候spring创建,对象只要是在使用过程中就会一直活着,当对象长时间不用也没有被引用时由java的垃圾回收机制回收
* IoC的作用:降低程序间的耦合
name以后依赖的管理,就交给spring来管理。我们只需要在配置文件说明------依赖注入
* 依赖注入的类型:
基本类型
其他bean类型
复杂类型结合类型
* 注入方式三种:
构造函数提供: 注入参数时用constructor-arg标签
属性: type:要注入的数据类型
index:指定要输入的数据类型重复时使用,可以独立使用,所有的参数从0开始
name:参数名称 (常用)
----------------------以上用于指定给哪个赋值----------------
value:要赋予的值,(基本类型和String类型的数据) (spring可以自动转换类型Date类型除外,Date默认是-/-/-的格式,其他的不行)
ref:用来引入其他bean的id
set方法提供:在标签中使用properties标签
<property name="mystrs"> ---name属性对应bean中的属性名称
<array> ---集合烈性
<value>aaa</value> ---赋予的值
<value>aaa</value>
<value>aaa</value>
</array>
</property>
<may>
<entry key="a" value="b"><entry>
<entry key="a" value="b"><entry>
</may>
注解提供:
* 注意事项:
用于注入list结构的有list array set标签
应用注入map结构的有map props标签
* 结构相同的标签可以互换,list结构一般只用list,map结构的一般只用map
* 主配置文件中的注入的bean的成员变量一定要是不怎么发生改变的,固定的,才会配置到xml文件中