Spring框架Bean配置自动装配方案实例详解
in 编程SpringJAVA with 0 comment

Spring框架Bean配置自动装配方案实例详解

in 编程SpringJAVA with 0 comment

Spring框架中提供了Autowire(自动装配)的相关注解与标签,其主要作用是为了让IOC容器为javabean自动注入其依赖的对象,使用自动装配可大大节省很多配置项

Spring6.jpg

@Autowired注解

Spring框架Bean配置方案采用的是注解配置,可以使用@Autowired注解来完成自动装配。

//在UserService类中有依赖UserDao类的内容
//使用@Autowired注解可以自动注入这个依赖对象
//自动寻找这个userDao,属性的命名替代了bean的名字
@Autowired
private UserDao userDao;

XML配置方案

常规XML配置Bean方案中我们会使用<ref>标签为JAVABean注入它依赖的对象。
这种方式可以让我们更加清晰的了解Bean之间的依赖关系,但是如果系统业务复杂庞大时,我们不得不去要花费大量的时间和精力用于创建和维护系统中的<ref>标签。
因此在XML配置方案中我们可以使用<bean>标签的autowire属性,通过指定它来让容器为受管JAVABean自动注入依赖对象。
自动装配按照指定模式自动去识别关联的Bean,快速解决依赖关系。
配置文件简洁,但文件的可读性大大降低,不能很容易的看出个Bean之间的依赖关系,降低了程序可维护性
因此实际上大型项目系统多数并不会去采用这个方案,总之,智者见智。

属性取值说明

<bean>的autowire属性有如下六个取值,他们的说明如下:

No
即不启用自动装配,Autowire默认的值。

byName
通过属性的名字的方式查找javabean依赖的对象并为其注入
比如说类User有个属性extUserInfo,指定byName后,IoC容器会在配置文件中查找id/name为extUserInfo的bean,然后使用seter方法为其注入

byType
通过属性的类型查找javabean依赖的对象并为其注入
比如类User有个属性extUserInfo,类型为ExtUserInfo,指定byType后,IoC容器会查找Class属性为ExtUserInfo的bean,使用seter方法为其注入

constructor
与byType一样,通过类型查找依赖对象,区别在于它不是使用seter方法注入,而是使用构造注入

autodetect
在byType和constructor之间自动的选择注入方式

default
由上级标签<beans>的default-autowire属性确定
在配置bean时,<bean>标签中Autowire属性的优先级比其上级标签高
如果在上级标签中定义default-autowire属性为byName,而在<bean>中定义为byType时,Spring IOC容器会优先使用<bean>标签的配置

XML配置实例

<!-- default-autowire可不指定,默认对未配置autowire="default"的生效 -->
<beans default-autowire="autodetect">

    <!-- 自动装配autowire="byName"生效 -->
    <bean id="user" class="com.mebugs.uesr.bean.User" autowire="byName"></bean>
    
    <!-- 自动装配autowire="autodetect"生效 -->
    <bean id="doctor" class="com.mebugs.uesr.bean.Doctor" autowire="default"></bean>
    
    <!-- 自动装配autowire="No"生效,未指定自动装配 -->
    <bean id="runner" class="com.mebugs.uesr.bean.Runner"></bean>
    
    <!-- dependency-check默认default,确保bean组件通过javabean描述的所有依赖关系都得到满足 -->
    <!-- 与自动装配功能一起使用效果更好 -->
    <!-- none:不进行依赖检查 -->
    <!-- objects:只做对象间依赖的检查 -->
    <!-- simple:只做原始类型和String类型依赖的检查 -->
    <!-- all:对所有类型的依赖进行检查,它包括了前面的objects和simple -->
    <bean id="member" class="com.mebugs.uesr.bean.Member" autowire="default" dependency-check="objects"></bean>
</beans>

结语

自从有了注解方案配置Bean,XML配置已经逐步被众多开发成员放弃。
原因?懒惰使人进步?

Responses