spring框架的学习(自己当笔记用)

spring Bean

Bean是由springIoC容器实例化、管理、和装配的对象。

Bean在spring中相当于普通java中对象。

在XML配置文件,Bean的写法如下代码所示:

bean元素下的id属性是该Bean的唯一标识符,用于获取Bean实例时的索引,class属性用于指定Bean的实现类,格式为该类的完全限定名(即包名.类名),property元素下的name属性与Bean对应实现类中的属性相对应,value属性则为该属性赋值。若name属性的值为对象的引用,则将value改成ref.scope则为该Bean的作用域。

 

Bean的实例化

在普通java程序中,如果要使用一个对象,我们需要对其先进行实例化。而在spring中Bean也是如此。

spring框架实例化Bean有三种方式:

1.构造方法实例化

创建一个构造方法实例化的类

测试类

 

结果

 

 

2.静态工厂实例化

与构造方法实例化不同的是,静态工厂实例化需要创建一个静态工厂类,XML配置文件中bean元素下的class属性并非Bean对应的实现类,而是静态工厂类,同时使用factory-method属性指定静态工厂的方法。

创建一个静态工厂实例化的类

创建一个静态工厂类,此类中定义一个creatBean方法,并返回StaticFactoryBean实例。

 

 

测试类

 

结果

 

3.实例工厂实例化Bean

此方法也需要创建一个工厂类(不是静态),并且在该工厂类中创建一个实例方法来创建实例,在XML配置文件中需要使用factory-bean属性指定配置的实例工厂,factory-method属性指定配置的实例方法。同时还需要配置工厂bean和实现类的bean。

创建一个实例工厂实例化Bean对应的实现类

 

测试类

结果

 

以上就是实例化Bean的三种方式,一般构造方法实例化Bean用的比较多。

 

Bean的作用域

singleton:默认的作用域,使用singleton定义的Bean在spring容器中只有一个Bean实例。

prototype:spring容器每次获取Bean实例时,都会创建一个新的Bean实例。

request:在HTTP请求中容器会返回一个Bean实例,不同的HTTP请求返回的Bean实例不同,仅在web容器中有效。

session:在HTTPsession中,容器将返回一个Bean实例,仅在web容器中有效。

application:为每个ServletContext对象创建Bean实例,仅在web容器中有效。

websocket:为每个WebSocket对象创建一个Bean实例,仅在web容器中有效。

 

这里说下singleton作用域与prototype的区别。

singleton是默认的作用域,可配置也可以不配置,而prototype则需要在XML配置文件中配置,它们的属性为scope。

我的理解为多个Bean去引用一个Bean是,如果作用域为singleton时,那么这些Bean都共享这个引用的Bean,不需要这么Bean引用一次实例化一次,那个Bean引用一次也实例化一次,也就是单例。而作用域为prototype时,每个Bean去引用同一个Bean时都需要实例化一次,都会创建一个新的Bean。以下为代码实现。

创建一个Boss类

 

创建一个Car类

 

配置文件

 

测试类

当作用域为prototype时,boss boss1  boss2都引用car时,返回了不同的实例,这是因为每引用一次都会重新实例化一次。

 

当作用域为singleton时,boss boss1  boss2都引用car时,返回了相同同的实例,它们都共享同一个car

 

Bean的生命周期

spring 容器可以管理singleton作用域下Bean的生命周期,在此作用域下,spring容器能够精确知道Bean何时创建,何时销毁,而在prototype作用域下,spring容器只负责创建,创建完成后就不再追踪其生命周期也不会管理。

通过代码来演示Bean的生命周期

 

这里init-method属性指定初始化方法,destroy-method属性指定销毁方法。

 

 

结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值