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

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

在Spring框架,可以用 auto-wiring 功能会自动装配Bean。要启用它,只需要在 <bean>定义“autowire”属性。
在Spring中,支持 5 自动装配模式。
  • no – 缺省情况下,自动配置是通过“ref”属性手动设定
  • byName – 根据属性名称自动装配。如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它。
  • byType – 按数据类型自动装配。如果一个bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它。
  • constructor – 在构造函数参数的byType方式。
  • autodetect – 如果找到默认的构造函数,使用“自动装配用构造”; 否则,使用“按类型自动装配”。

示例

Customer 和 Person 对象自动装配示范。
package com.yiibai.common;public class Customer {	private Person person;		public Customer(Person person) {		this.person = person;	}		public void setPerson(Person person) {		this.person = person;	}	//...}
package com.yiibai.common;public class Person {	//...}

1. Auto-Wiring ‘no’

这是默认的模式,你需要通过 'ref' 属性来连接 bean。

2. Auto-Wiring ‘byName’

按属性名称自动装配。在这种情况下,由于对“person” bean的名称是相同于“customer” bean 的属性(“person”)名称,所以,Spring会自动通过setter方法将其装配 – “setPerson(Person person)“.

查看完整的示例 – 

3. Auto-Wiring ‘byType’

通过按属性的数据类型自动装配Bean。在这种情况下,由于“Person” bean中的数据类型是与“customer” bean的属性(Person对象)的数据类型一样的,所以,Spring会自动通过setter方法将其自动装配。– “setPerson(Person person)“.

查看完整的示例 – 

4. Auto-Wiring ‘constructor’

通过构造函数参数的数据类型按属性自动装配Bean。在这种情况下,由于“person” bean的数据类型与“customer” bean的属性(Person对象)的构造函数参数的数据类型是一样的,所以,Spring通过构造方法自动装配 – “public Customer(Person person)“.

查看完整的示例 – 

.

这是一件好事,这两个auto-wire’ 和 ‘dependency-check’ 相结合,以确保属性始终自动装配成功。

结论

在我看来,Spring ‘auto-wiring’ 以极大的成本做出更快开发效率 - 它增加了对整个 bean 配置文件复杂性,甚至不知道哪些bean将自动装配哪个Bean。

在实践中,我更顷向手动关联创建,它始终是干净,也很好地工作,或者使用 ,这是更加灵活和建议。

转载地址:http://kibgo.baihongyu.com/

你可能感兴趣的文章
【已解决】如图,说我磁盘不够,看到var目录下有的个隐藏文件夹占了46G,不知道怎么删除...
查看>>
[LintCode] O(1)检测2的幂次
查看>>
BZOJ3295:[CQOI2011]动态逆序对——题解
查看>>
Office Online简介
查看>>
房天下爬虫
查看>>
常用Shell脚本命令(备忘)
查看>>
Python中的__init__,__call__
查看>>
如何设置Navicat的显示字体与字体大小?
查看>>
【转】HttpServlet详解
查看>>
项目 04 数据库迁移工具,增加用户系统-用户中心
查看>>
程序员小笑话
查看>>
DataTable AsEnumerable 的使用
查看>>
JS滚轮事件(mousewheel/DOMMouseScroll)了解
查看>>
GDI+与GDI屏幕抓图比较
查看>>
mysql中date_add()函数的使用?
查看>>
Window系统查找并关闭进程中的端口
查看>>
BZOJ2151种树——模拟费用流+链表+堆
查看>>
Computers 递推题 sum[i][j]=max(sum[i-1][i-1]+c+sum[i][j],sum[i-1][j]);
查看>>
css clear属性
查看>>
求助listview展开子child问题
查看>>