本文为自我学习使用,如转载需本人同意
bean基础配置
id
id是bean的名称,可以随便起,但是不能有重复
name
name为bean的别名,和id有一样的效果(包括所有),所以也不能重复
多个别名可以用空格、逗号或分号隔开
class
bean的类所在“地址”,就是带上包
scope
作用范围。bean默认为单例,可以设置scop为prototype,bean就变成了多例
单例:获取的多个bean为内存中同一个
多例:获取的多个bean为内存中不同的
所以不适合管理封装实体域对象
bean实例化的方法
bean本质上就是对象,创建bean使用构造方法完成,但为了兼容以前的带工厂的项目,提供了静态工厂,实例工厂等多种方法
构造方法(常用)
静态工厂
实例工厂
FactoryBean
bean的生命周期
添加销毁之前方法init和销毁之后方法destory
手动配置xml,指定init和destory
运行并不会调用destory方法,因为java虚拟机关闭了,destory没来得及执行
方法1:手动关闭容器
ApplicationContext接口并没有close函数,但是其子接口有,所以可以直接使用ClassPathXmlApplicationContext
执行了destory
方法2:钩子关闭容器
使用ctx.registerShutdownHook(),作用是指定在关闭程序前关闭容器
可以放在任何位置
使用接口调用“init”和“destory”
说明:之所以叫afterPropertiesSet,是因为次方法是在setBookDao也就是初始化引用之后执行的
注入方法和类型
set注入简单类型
1.添加简单类型和简单类型set方法
2.配置xml
构造注入引用类型
添加引用类型和构造器
提示:ref为BookDao的bean的id名称
构造注入简单类型(形参名)
添加简单类型和构造器
xml
构造注入简单类型(类型)
但这种方案不适合存在形参类型一样情况
构造注入简单类型(指定位置)
依赖注入方法选择
自动装配和注入
自动装配
在上面案例中,我们都采用property指定了变量名name和引用ref来装配的
但我们也可以使Spring帮我们搜索容器中有的bean实现装配
按类型自动装配
set必须保留(没有会报错)
如果存在两个实现类,就会报错
需要注意:是将bean的class的类型与属性的类型匹配,并且可以接口匹配实现类
按名称自动装配
因为按名称,id是唯一的,所以不存在多个报错。
这里需要注意:byName Spring会将bean的id与属性名进行匹配。
如:bookDao匹配bean的id bookDao(其实是匹配setBookDao里的bookDao,因为标准命名,所以这样说)
自动装配的特征
集合注入
注意:和能混用
如果是引用类型:
案例:数据源对象管理
第三方资源配置管理
导入坐标
管理bean
使用的是set注入,这需要看管理的bean是否提供set方法
管理c3p0
可以在https://mvnrepository.com/中搜索c3p0坐标
需要mysql连接坐标,其能提供连接驱动等
说明:完全陌生的bean需要查相关文档,知道class和property