Spring读书学习笔记(四)——装配Spring Bean

4.1 依赖注入的3种方式

依赖注入有3种方式:构造器注入,setter注入,接口注入。

4.1.1 构造器注入

构造器注入依赖于构造方法实现,而构造方法可以是有参数或者是无参数的。在大部分情况下,都是通过类的构造方法来创建类对象,Spring也可以采用反射的方式,通过使用构造方法来完成注入,这是构造器注入的原理。

这种注入比较简单,但缺点也很明显,如果参数很多,会比较复杂,影响可读性,这时候可以考虑setter。

4.1.2 使用setter注入

setter注入是Spring中最主流的注入方式,它利用Java Bean规范所定义的setter方法来完成注入,灵活且可读高。它消除了实验构造器注入时出现多个参数的可能性,首先可以把构造方法声明为无参数的,然后使用setter注入为其设置的对应值,其实也是通过Java反射技术得以实现的。

4.1.3 接口注入

资源来自外界。


4.2 装配Bean概述

Spring中提供了3种方式进行配置:在XML中进行配置,在Java接口和类中实现配置,隐式Bean的发现机制和自动装配机制。

当配置的类是你自身正在开发的工程,那么应考虑Java配置为主,而Java配置又分为自动装配和Bean名配置。在没有歧义的情况下,优先使用自动装配,这样可以减少大量的XML配置。如果所需的类不是你工程开发的,那么建议使用XML方式。


4.3 XML配置装配Bean

4.3.1 装配简易值

<bean id = "role2" class = "com.ssm.chapter9.pojo.Role">
	<id name = "id" value = "1"/>
	<id name = "roleName" value = "高级工程师"/>
	<id name = "note" value = "重要人员"/>
</bean>


以上是一个简易的配置。id属性是Spring找到这个Bean的编号,不过id不是一个必须的属性,如果没有声明它,那么Spring将会采用“全限定名#{number}”的格式生成编号。class是一个类全限定名。property元素是定义类的属性,其中name属性定义的是属性名称,,而value是其值。

4.3.2 装配集合

List属性为对应的<list>元素进行装配,然后通过多个<value>元素设值。

Map属性为对应的<map>元素进行装配,然后通过多个<entry>元素设值,只是entry包含一个key和一个value的设置。

Properties属性为对应的<properties>元素进行装配,然后通过多个<property>元素设置,property元素有一个必填属性key,然后可以设置值。

Set属性为对应的<set>元素进行装配,然后通过多个<value>元素设值。

数组可以使用<array>元素进行装配,然后通过多个<value>元素设值。

4.3.3 命名空间装配

使用命名空间的时候要先引入对应的命名空间和XML模式文件。


4.4 通过注解装配Bean

使用注解的方式可以减少XML配置,它既能实现XML的功能,也提供了自动装配的功能,采用了自动装配后,程序员所做的决断就更少了,更有利于程序的开发,这就是“约定优于配置”的开发原则。

Sprin提供两种方式让Spring IoC容器发现Bean。

组件扫描:通过定义资源的方式,让Spring IoC容器扫描对应的包,从而把Bean装配进来。

自动装配:通过注解定义,使得一些依赖关系可以通过注解完成。

4.4.1 使用@Component

注解@Component代表Spring IoC会把这个类扫描生成Bean实例,而value属性代表这个类在Spring中的id,这相当于XML中定义的Bean的id。

@ComponentScan代表进行扫描,默认扫描当前包的路径,POJO的包名和它保持一致才能描述,否则就没有。

4.4.2 自动装配——@Autowired

自动装配技术是一种由Spring自己发现对应的Bean,自动完成装配工作的方式,它会应用到注解@Autowired上,这个时候Spring会根据类型去寻找定义的Bean然后将其注入,这里需要留意按类型的方式。

4.4.3 自动装配的歧义性(@primary和@Qualifier)

采用按类型来注入对象时,Java中接口可以有多个实现类,同样的抽象类也可以有多个实例化的类,这样就会造成通过类型获取的Bean不唯一,从而导致Spring IoC类似于按类型的方法无法获得唯一的实例化类。

1.注解@Primary

此注解告诉Spring IoC容器,请优先使用此类注入。

2.注解@Qualifier

使用此注解后就可以使用这个方法通过名称从IoC容器中获取对象进行注入。


4.5 properties文件

开发过程中,配置文件往往就是那些properties文件,比如使用属性文件配置数据库文件。

使用属性文件可以有效地减少硬编码,很多时候修改环境只需要修改配置文件就可以了,这样能够有效提高运维人员操作的便利性,在Spring中也可以通过注解或者XML的方式加载属性文件。

4.5.1 使用注解方式加载属性文件

Spring提供了注解@PropertySource来加载属性文件。其配置项如下:

name:字符串,这次属性配置的名称。

value:字符串数组,可以配置多个属性文件。

ignoreResourceNotFound:boolean值,默认为false,其含义为如果找不到对应的属性文件是否进行忽略处理,在默认的情况下找不到对应的配置文件会抛出异常。

encoding:编码,默认为“”。

4.5.2 使用XML方式加载属性文件

是需要使用<context:property-placeholder>元素加载一些配置项即可。


4.6 Bean的作用域

Spring提供了4种作用域,它会根据情况来决定是否生成新的对象。

singleton:它是默认的选项,在整个应用中,Spring只为其生成一个Bean的实例。

prototype:每次注入,或者通过Spring IoC容器获取Bean时,Spring都会为它创建一个新的实例。

session:在Web应用中使用,就是在会话过程中Spring只创建一个实例。

request:在Web应用中使用,就是在一次请求中Spring会创建一个实例,但是不同的请求会创建不同的实例。






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值