Spring 初探(四)(Spring autowire 相关)

本文深入探讨Spring框架中的依赖注入机制,包括autowire的各种策略如byName、byType及constructor,解释了@Autowired与@Qualifier如何协作解决依赖模糊问题,并介绍了基于注解而非XML配置的依赖注入方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

autowire相关
spring bean配置的一致性表现在get set 方法与bean当中的值的一致性上。
在使用byName标签进行属性配置时是可以看出的,使用byName后属性bean的相应
id与get set方法中的名称是相匹配的(小驼峰)


使用byType进行配置标注时可以看做是寻找唯一符合属性配置type的类作为
对应属性。


使用constructor作为autowire值时在Beans.xml中的形式基本上与byName byType相同,
唯一的不同是相应属性的初始化需要使用默认构造函数显式地给出,这里基本作用原理与
byType相同,会寻找唯一符合要求的作为属性,找不到会抛出异常。


还有一个默认的方法是autodetect,即先使用constructor形式,当找不到后使用byType
进行寻找。


现在Spring框架所广泛使用的是基于annotation而非XML配置的bean依赖关系,这种特性
使得可以将依赖关系展现在代码中,而非单独在XML配置。


由于XML配置是在annotation之后生效的,故前者可以重载后者。
在之前一些版本中,spring annotation并非自动生效的,故要其生效,需要在beans
中添加如下配置,<context:annotation-config>


在可以使用annotation后就可以展开叙述了,
@Required是用来修饰setter method方法的,使用其进行修饰的对应属性在使用前
必须在bean中进行指定的初始化,即不能为null 否则会抛出异常,这与java @Override
是类似的。


@Autowired可以修饰多种方法,下面分类讨论。
修饰setter methods时与前述使用autowired byType的结果是相同的。(即不用再指定autowired属性)
但要指出,对于setter methods给出修饰后默认相当于同时给出了@Required修饰,
这时要求初始化bean时必须对诸属性进行赋值,要规避这个行为可以改为
@Autowired(required = false)。


当直接对类的property使用@Autowired进行修饰时可以不定义setter method,框架会
自动设定setter method


实际上当使用构造函数进行property初始化时根bean的关系就不算大了,这时setter\getter
 methods的使用就显得没有那么重要了。对类的构造函数进行@Autowired修饰时是可以按
byType的形式理解。


从上面的讨论中可以看到,annotation Autowired基本上是 annotation = "byType"的等价物,
这使得当在一个环境中有多个类满足Autowired条件时会不知道使用哪一个,
这时可以结合@Qualifier("*")进行限定(qualifier: 限定)
其基本等价于将bean的依赖关系设定为annotation = "byName" 并将"*"作为name(id)进行匹配。


@PostConstruct 及@PreDestroy是用来替代在bean中需要显式给出的init-method及destory-method
的,直接在bean对应的类中的相应方法去前进行声明即可。


@Resource(name = "*")基本上等价于@Autowired + @Qualifier













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值