博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring3- Spring 自动装配 Bean
阅读量:6224 次
发布时间:2019-06-21

本文共 2069 字,大约阅读时间需要 6 分钟。

Spring3- Spring 自动装配 Bean

 

 Spring Auto-Wiring Beans——Spring自动装配Bean

所谓自动装配,就是将一个Bean注入到其他Bean的Property中,类似于以下:

 

Spring支持5种自动装配模式,如下:

no            ——默认情况下,不自动装配,通过“ref”attribute手动设定。

buName       ——根据Property的Name自动装配,如果一个bean的name,和另一个bean中的Property的name相同,则自动装配这个bean到Property中。

byType     ——根据Property的数据类型(Type)自动装配,如果一个bean的数据类型,兼容另一个bean中Property的数据类型,则自动装配。

constructor   ——根据构造函数参数的数据类型,进行byType模式的自动装配。

autodetect   ——如果发现默认的构造函数,用constructor模式,否则,用byType模式。

 

下例中演示自动装配

Customer.java如下:

package com.lei.common; public class Customer {    private Person person;     public Customer(Person person) {        this.person = person;    }     public void setPerson(Person person) {        this.person = person;    }    //...}

 

 Person.java如下:

package com.lei.common; public class Person {    //...}

 

1.      Auto-Wiring ‘no’

默认情况下,需要通过'ref’来装配bean,如下:

 

2.      Auto-Wiring ‘byName’

根据属性Property的名字装配bean,这种情况,Customer设置了autowire="byName",Spring会自动寻找与属性名字“person”相同的bean,找到后,通过调用setPerson(Person person)将其注入属性。

 

 如果根据 Property name找不到对应的bean配置,如下

 

Customer中Property名字是person,但是配置文件中找不到person,只有person_another,这时就会装配失败,运行后,Customer中person=null。

 

3.      Auto-Wiring ‘byType

根据属性Property的数据类型自动装配,这种情况,Customer设置了autowire="byType",Spring会总动寻找与属性类型相同的bean,找到后,通过调用setPerson(Person person)将其注入。

 

 如果配置文件中有两个类型相同的bean会怎样呢?如下:

 

 一旦配置如上,有两种相同数据类型的bean被配置,将抛出UnsatisfiedDependencyException异常,见以下:

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException:

所以,一旦选择了’byType’类型的自动装配,请确认你的配置文件中每个数据类型定义一个唯一的bean。

 

4.      Auto-Wiring ‘constructor’

这种情况下,Spring会寻找与参数数据类型相同的bean,通过构造函数public Customer(Person person)将其注入。

 

 5.      Auto-Wiring ‘autodetect’

这种情况下,Spring会先寻找Customer中是否有默认的构造函数,如果有相当于上边的’constructor’这种情况,用构造函数注入,否则,用’byType’这种方式注入,所以,此例中通过调用public Customer(Person person)将其注入。

 

 

注意:

项目中autowire结合dependency-check一起使用是一种很好的方法,这样能够确保属性总是可以成功注入。

 

 

       最后,我认为,自动装配虽然让开发变得更快速,但是同时却要花更大的力气维护,因为它增加了配置文件的复杂性,你甚至不知道哪一个bean会被自动注入到另一个bean中。我更愿意写配置文件来手工装配。

转载于:https://www.cnblogs.com/shiqi2016/p/4437808.html

你可能感兴趣的文章
在.NET中调用Oracle9i存储过程经验总结
查看>>
Eclipse崩溃后无法启动的问题解决
查看>>
Android Studio git ignore
查看>>
springmvc
查看>>
22.2. 用户认证
查看>>
1.7. User interfaces
查看>>
阿里Druid数据连接池在SSM框架中的配置使用
查看>>
基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作...
查看>>
Linux虚拟主机通过程序实现二级域名绑定到子目录
查看>>
7.12. cvs diff
查看>>
Android酷炫实用的开源框架(UI框架)
查看>>
Winform开发框架之对话框样式同化
查看>>
一脸懵逼学习Linux的Shell编程
查看>>
Jmeter调试工具---Debug Sampler
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.5.14
查看>>
impdp的TABLE_EXISTS_ACTION参数选项
查看>>
机器学习之深入理解神经网络理论基础、BP算法及其Python实现
查看>>
ecshop设置一个子类对应多个父类并指定跳转url的修改方法
查看>>
【spring源码学习】spring的事务管理的源码解析
查看>>
遇见喜欢数学的女孩
查看>>