Spring中的Bean(第二章)

目录

2

2.1 Bean的配置

2.2 Bean的实例化

实例化bean的三种方式:

2.3 Bean的作用域

2.4 生命周期

生命周期:

2.5 Bean的装配方式

装配方式:

依赖注入注解:

总结:

基本注解:


2

2.1 Bean的配置

Spring容器支持xml(更常用)和Properties两种格式的配置文件,前者通过xml文件来注册并管理bean之间的依赖关系。

id和name的区别:

可同为Spring容器中的bean进行配置和管理。

但name属性可为bean指定多个名称,之间用逗号或分号隔开。

2.2 Bean的实例化

实例化bean的三种方式:

方式1:构造器实例化(最常用)

  1. 创建一个Bean类 通过Bean对应类中的默认无参构造方法来实例化Bean。
  2. 在配置文件中配置id和class(全类名)。
  3. 编写测试类

方式2:静态工厂实例化

  1. 创建一个Bean类
  2. 创建一个静态工厂类并编写静态工厂的方法

c.在配置文件中配置id,class(指静态工厂类的全类名)factory-method=”?”(指静态工厂类中静态方法)。

d.编写测试类

方式3:实例工厂实例化

  1. 创建一个Bean类
  2. 创建一个工厂类并创建实例方法

c.在配置文件中配置id,factory-bean(实例工厂类的类名)和factory-method(实例方法名)

红框部分的id与factory-bean指向配置的实例工厂,factory-method指向使用的实例工厂中的哪个方法。

d.编写测试类

2.3 Bean的作用域

常用的有:

singleton(单例):为Spring容器的默认模式,使用同个bean创建多个对象时,指向同一个对象(共享/返回此bean实例)。

Prototype(原型):使用同个bean创建多个对象时,不是同一个。

流程:

     1编写一个bean类。

     2配置配置文件。

     3测试

另外还有request,session,globalSession,application,websocket共七种。

2.4 生命周期

对于singleton作用域,Spring容器知道bean的创建时期,合适初始化,销毁时期,即整个生命周期。

对于prototype作用域,Spring容器只负责创建。不负责管理(交给客户端代码处理)。

生命周期:

初始化方法的注解:

@PostConstruct  将方法设置为生命周期的初始化方法,直接在初始化方法的声明语句上添加即可。(初始化方法在构造方法之后执行)

销毁方法的注解:

@PreDestroy  将方法设置为生命周期的销毁方法,直接在销毁方法的声明语句上添加即可。(在对象彻底销毁之前执行销毁方法)

延迟加载注解:

@Lazy(true/false)  在单例模式下,设置是否是延迟加载,比如:@Lazy(true)用于设置延迟加载。在类的上方添加即可。(默认为true,开启延迟加载,不自动创建对象)延迟加载作用:在容器启动时,不自动创建对象。

Bean生命周期的整个执行流程详见课本24页。

2.5 Bean的装配方式

Bean的装配可以理解为依赖关系注入,bean的装配方式即bean依赖注入的方式。

装配方式:

三种装配方式,基于注解的装配配置文件比基于xml的装配更简洁,便于维护和升级,自动装配相比基于注解的装配更简易。

基于xml的装配:

设值注入Bean需满足:1 bean类提供无参构造。2 bean类为需注入的属性提供对应的set方法。

分为:

1 使用设值注入。在bean元素的子元素里的property来为每个属性注入值。 步骤:

step1提供无参构造;

step2提供set方法;

step3提供toString()方法(为了输出时能看到结果);

step4:在配置文件中

step5测试。

2 使用构造注入。在bean元素的子元素里的constructor-arg来定义构造方法的参数,可使value属性(或子元素)来设置该参数的值。步骤:

step1提供有参构造;

step2在配置文件中

step3测试。

使用基于注解的装配(最常用):

自动装配:就是将一个bean自动注入到其他bean的property中(通过设置bean元素中的autowire属性)。

依赖注入注解:

@Resource:

1只能处理set注入(大部分是set注入,建议使用)。

2可将注解添加到set方法上,也可写在属性上面(建议),使用name属性要指定注入的bean的id。

3如果不指定,会按照byType的方式注入。4也可将注解添加在属性上。

@Autowired和@Qualifier:

1即支持构造器注入又支持set注入。

2当采用set方式注入时,可将@Autowired添加到set方法上面,(通常)写在属性上面。如果不使用@Qualifier,则容器会用byType的方式注入(有可能出错),所以建议使用@Qualifier,明确指定要注入的bean的id;也可将这两个注解直接添加到属性的上面,随后可以不用写set方法,但是为了满足javaBean规范尽量写。

3当采用构造器注入的话(一般不用),可以将注解添加在对应的构造方法上面,建议使用@Qualifier。指定要注入bean的id,会使用byName的方式注入,不能在属性上面,这样就变成了set方式注入。

@Inject和@Named(了解)

@Value:

1可以使用该注解注入基本类型的值。

2也可以使用该注解来使用Spring表达式来获取其他bean当中属性的值,或者读取.properties文件的内容。

3该注解可以添加到属性前,或者添加到对应的set方法上。

总结:

1如果使用构造器注入,使用@Autowired和@Qualifier注解。

2使用set方式注入就使用@Resource注解。

3一般使用set方式注入。

基本注解:

1@Component 相当于一个bean,默认id是类名小写后的名字,一般需要自定义的。写在类的上面。

2@Scope  可以使类的作用域为多例的,可以创建多个引用不同的对象。

3@PostConstruct  指定一个初始化方法,写在初始化方法的上面。

4@PreDestroy  指定销毁方法,写在销毁方法上面。

5@Lazy(true/false)  

在单例模式下,设置是否是延迟加载,比如:@Lazy(true)用于设置延迟加载。在类的上方添加即可。(默认为true,开启延迟加载,不自动创建对象)

延迟加载作用:在容器启动时,不自动创建对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值