spring 记录修改前和修改后的数据 spring 修改bean_spring 记录修改前和修改后的数据

 

 

bean基本配置

spring 记录修改前和修改后的数据 spring 修改bean_spring_02

bean别名配置

spring 记录修改前和修改后的数据 spring 修改bean_spring_03

 

在IOC容器里面一个容器可以拥有多个别名如下图所示,利用bean标签里面一个叫做name的属性,bookservice拥有三个别名

spring 记录修改前和修改后的数据 spring 修改bean_实例化_04

在测试类里面获取bean对象的时候可以使用别名 

spring 记录修改前和修改后的数据 spring 修改bean_spring_05

  

在配置文件ref属性获取的时候也可以使用别名

bean作用范围配置

spring 记录修改前和修改后的数据 spring 修改bean_spring 记录修改前和修改后的数据_06

 

Spring提供的每一个bean都是单例的,输出地址都一样

spring 记录修改前和修改后的数据 spring 修改bean_java_07

spring 记录修改前和修改后的数据 spring 修改bean_实例化_08

若想使得该bean对象是一个非单例的对象,需要用到一个新的属性——scope

spring 记录修改前和修改后的数据 spring 修改bean_java_09

 改变scope属性的值后重新输出就可以得到两个不同的bean

spring 记录修改前和修改后的数据 spring 修改bean_实例化_10

  

spring 记录修改前和修改后的数据 spring 修改bean_spring_11

对于bean来说,一些需要创建多次的对象是不适合放到容器里面

bean实例化的三种方式——构造方法(常用)

spring 记录修改前和修改后的数据 spring 修改bean_java_12

 

bean的实例化过程可以采用构造方法的方式,不管是公共还是私有都可以被调用,因为是用的反射的方式,所以即使是私有的也可以访问。

加上一个参数就无法调用了,说明bean调用的是对象的无参构造方法

spring 记录修改前和修改后的数据 spring 修改bean_实例化_13

bean实例化的三种方式——静态工厂(了解即可)

spring 记录修改前和修改后的数据 spring 修改bean_java_14

 

先定义 一个接口实现类

spring 记录修改前和修改后的数据 spring 修改bean_构造方法_15

再建一个静态工厂获取对象

spring 记录修改前和修改后的数据 spring 修改bean_spring 记录修改前和修改后的数据_16

 

在 测试类中 

spring 记录修改前和修改后的数据 spring 修改bean_java_17

spring 记录修改前和修改后的数据 spring 修改bean_实例化_18

 

上面这种造对象的方式要想交给Spring进行管理需要在配置文件里面如下设置

注意这里bean本来应该创建的是这个Factory工厂对象,要拿到的是orderDao,要使用一个新的属性,factory-method,属性值即使工厂里面的构造方法 

spring 记录修改前和修改后的数据 spring 修改bean_java_19

然后就可以通过Spring的形式得到OrderDao 

spring 记录修改前和修改后的数据 spring 修改bean_构造方法_20

spring 记录修改前和修改后的数据 spring 修改bean_spring_21

 

bean实例化的三种方式——实例工厂与FactoryBean() 

和上面那个不同,这个工厂方法不是静态的  

spring 记录修改前和修改后的数据 spring 修改bean_java_22

 在测试类里面 

spring 记录修改前和修改后的数据 spring 修改bean_java_23

在配置文件中

spring 记录修改前和修改后的数据 spring 修改bean_java_24

 

spring 记录修改前和修改后的数据 spring 修改bean_实例化_25

改良版本

新建 一个实现类统一了标准<>里面是要得到的bean对象类型,上往下三个方法分别用来得到bean实例 ,得到bean类型,设定bean是否单例

spring 记录修改前和修改后的数据 spring 修改bean_java_26

spring 记录修改前和修改后的数据 spring 修改bean_java_27

...............不写了,以后用到的时候再来看吧,据说大量的框架都是用改良版本和spring打交道

 Bean生命周期

定义如下一个类 

spring 记录修改前和修改后的数据 spring 修改bean_spring 记录修改前和修改后的数据_28

 

在<bean>标签下有一个init-method和一个destroy-method属性可以指定在初始化阶段和销毁解段调用哪一个方法。

spring 记录修改前和修改后的数据 spring 修改bean_spring_29

spring 记录修改前和修改后的数据 spring 修改bean_构造方法_30

 

但是因为这里的程序都是直接结束,没有销毁容器的机会,所以不会有输出。

改成如下格式就可以正常的执行销毁时要执行的方法

spring 记录修改前和修改后的数据 spring 修改bean_spring 记录修改前和修改后的数据_31

 

还有另一种关闭容器的方式,加上一个关闭钩子,

作用就是在虚拟机 关闭之前先关闭容器 

spring 记录修改前和修改后的数据 spring 修改bean_spring 记录修改前和修改后的数据_32

 

spring 记录修改前和修改后的数据 spring 修改bean_构造方法_33

 

还有一种方式就是spring使用接口控制生命周期,可以杜绝上面的这个init—method

 

spring 记录修改前和修改后的数据 spring 修改bean_java_34

Bean完整生命周期

spring 记录修改前和修改后的数据 spring 修改bean_实例化_35

  

spring 记录修改前和修改后的数据 spring 修改bean_spring_36