bean基本配置
bean别名配置
在IOC容器里面一个容器可以拥有多个别名如下图所示,利用bean标签里面一个叫做name的属性,bookservice拥有三个别名
在测试类里面获取bean对象的时候可以使用别名
在配置文件ref属性获取的时候也可以使用别名
bean作用范围配置
Spring提供的每一个bean都是单例的,输出地址都一样
若想使得该bean对象是一个非单例的对象,需要用到一个新的属性——scope
改变scope属性的值后重新输出就可以得到两个不同的bean
对于bean来说,一些需要创建多次的对象是不适合放到容器里面
bean实例化的三种方式——构造方法(常用)
bean的实例化过程可以采用构造方法的方式,不管是公共还是私有都可以被调用,因为是用的反射的方式,所以即使是私有的也可以访问。
加上一个参数就无法调用了,说明bean调用的是对象的无参构造方法
bean实例化的三种方式——静态工厂(了解即可)
先定义 一个接口实现类
再建一个静态工厂获取对象
在 测试类中
上面这种造对象的方式要想交给Spring进行管理需要在配置文件里面如下设置
注意这里bean本来应该创建的是这个Factory工厂对象,要拿到的是orderDao,要使用一个新的属性,factory-method,属性值即使工厂里面的构造方法
然后就可以通过Spring的形式得到OrderDao
bean实例化的三种方式——实例工厂与FactoryBean()
和上面那个不同,这个工厂方法不是静态的
在测试类里面
在配置文件中
改良版本
新建 一个实现类统一了标准<>里面是要得到的bean对象类型,上往下三个方法分别用来得到bean实例 ,得到bean类型,设定bean是否单例
...............不写了,以后用到的时候再来看吧,据说大量的框架都是用改良版本和spring打交道
Bean生命周期
定义如下一个类
在<bean>标签下有一个init-method和一个destroy-method属性可以指定在初始化阶段和销毁解段调用哪一个方法。
但是因为这里的程序都是直接结束,没有销毁容器的机会,所以不会有输出。
改成如下格式就可以正常的执行销毁时要执行的方法
还有另一种关闭容器的方式,加上一个关闭钩子,
作用就是在虚拟机 关闭之前先关闭容器
还有一种方式就是spring使用接口控制生命周期,可以杜绝上面的这个init—method
Bean完整生命周期