Spring的自动装配Bean的三种方式
来源:互联网 发布:联通在线网络测速 编辑:程序博客网 时间:2024/05/22 12:18
spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>、<constructor-arg>)。IOC容器会自动建立javabean之间的关联关系。
如果没有采用自动装配的话,手动装配我们通常在配置文件中进行实现:一下代码就是手动装配:
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<
bean
id
=
"customerDAO"
class
=
"com.hebeu.customer.dao.JdbcCustomerDAO"
>
<
property
name
=
"dataSource"
ref
=
"dataSource"
/>
</
bean
>
</
beans
>
通过<property name="dataSource" ref="dataSource" />向customerDAO的bean中注入了dataSource
在Spring框架,可以用 auto-wiring 功能会自动装配Bean。要启用它,只需要在 <bean>定义“autowire”属性。
<
bean
id
=
"customer"
class
=
"com.yiibai.common.Customer"
autowire
=
"byName"
/>
在Spring中,支持 5 自动装配模式。
- no – 缺省情况下,自动配置是通过“ref”属性手动设定
- byName – 根据属性名称自动装配。如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它。
- byType – 按数据类型自动装配。如果一个bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它。
- constructor – 在构造函数参数的byType方式。
- autodetect – 如果找到默认的构造函数,使用“自动装配用构造”; 否则,使用“按类型自动装配”。【在Spring3.0以后的版本被废弃,已经不再合法了】
第一种自动装配【根据属性名称自动装配】
package
com.hebeu.model;
public
class
Customer {
private
Address address;
public
Customer() {
}
public
Customer(
int
id, Address address) {
super
();
this
.address = address;
}
public
Address getAddress() {
return
address;
}
public
void
setAddress(Address address) {
this
.address = address;
}
}
package
com.hebeu.model;
public
class
Address {
private
String fulladdress;
public
Address(){
}
public
Address(String addr){
this
.fulladdress = addr;
}
public
String getFulladdress() {
return
fulladdress;
}
public
void
setFulladdress(String fulladdress) {
this
.fulladdress = fulladdress;
}
}
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<
bean
id
=
"customer"
class
=
"com.hebeu.model.Customer"
autowire
=
"byName"
></
bean
>
<
bean
id
=
"address"
class
=
"com.hebeu.model.Address"
>
<
property
name
=
"fulladdress"
value
=
"YiLong Road, CA 188"
></
property
>
</
bean
>
</
beans
>
这样就将address注入到Customer中。这就是自动注入ByName.在Customer bean中公开了一个属性address,Spring容器会找到address bean,并且装配。这里必须要注意,Customer中要被注入的bean的set方法要求必须是public的,否则会报空指针异常。还有配置的bean的id必须和Customer中声明的变量名相同。
第二种自动装配【根据数据类型自动装配】
声明的俩个bean同样为Customer以及Address,将applicationContext.xml转换为这样的就是实现根据数据类型进行自动装配。
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<
bean
id
=
"customer"
class
=
"com.hebeu.model.Customer"
<strong><
span
style
=
"color:#FF0000;"
>autowire="byType"</
span
></
strong
>></
bean
>
<
bean
id
=
"bean1"
class
=
"com.hebeu.model.Address"
>
<
property
name
=
"fulladdress"
value
=
"YiLong Road, CA 188"
></
property
>
</
bean
>
</
beans
>
类型自动装配的意思是如果一个bean的数据类型与其他的bean属性的数据类型相同,将会自动兼容装配它。当然要求只能配置一个某一个类型的bean.如果配置成这样,那么是会出错的。
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<
bean
id
=
"customer"
class
=
"com.hebeu.model.Customer"
autowire
=
"byType"
></
bean
>
<
bean
id
=
"bean1"
class
=
"com.hebeu.model.Address"
>
<
property
name
=
"fulladdress"
value
=
"YiLong Road, CA 188"
></
property
>
</
bean
>
<
bean
id
=
"bean2"
class
=
"com.hebeu.model.Address"
>
<
property
name
=
"fulladdress"
value
=
"YiLong Road, CA 188"
></
property
>
</
bean
>
</
beans
>
第三种自动装配【根据构造方法自动装配】
案例同上,将applicationContext.xml转换为如下,就实现了按照构造方法自动装配:
<
beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<
bean
id
=
"customer"
class
=
"com.hebeu.model.Customer"
>
<!-- 构造方法的参数 -->
<
constructor-arg
>
<
ref
bean
=
"bean1"
/>
</
constructor-arg
>
</
bean
>
<
bean
id
=
"bean1"
class
=
"com.hebeu.model.Address"
>
<
property
name
=
"fulladdress"
value
=
"YiLong Road, CA 188"
></
property
>
</
bean
>
</
beans
>
它实际上是构造函数的参数类型自动装配。这意味着如果一个bean的数据类型与其他bean的构造器参数的数据类型是相同的,那么就自动装配。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- Spring的自动装配Bean的三种方式
- Spring的自动装配Bean的三种方式
- spring基础-Bean的装配方式(三)自动装配
- Spring装配bean的三种方式
- spring装配bean的三种方式
- Java乔晓松-spring自动装配Bean的4种方式
- Spring自动装配Bean属性的四种方式
- Spring的三种装配Bean的方式
- Spring中装配bean的三种主要方式
- 【spring】1、三种装配bean的方式
- Spring中装配bean的三种主要方式
- Spring学习(四)-Bean的三种装配方式
- [Spring]Bean的自动装配
- # Spring Bean 的自动装配
- spring bean的自动装配
- spring bean的自动装配
- Spring的自动装配Bean
- Spring bean的自动装配
- scala中akka actor例子
- ubuntu_drl_图像分层对象检测
- 【POJ 3264 Balanced Lineup】 线段树
- android 多语言设置没法切到印尼语
- 【树上倍增】【USACO MAR11银组】聚会地点
- Spring的自动装配Bean的三种方式
- 扎实 Javascript 基础 计划
- Virus_LPK专杀
- 移动端meta设置大全
- Spring项目HTTPS
- python pandas dataframe 小结(包括集合set)
- AKKA-源码-dispatcher的构建过程
- Repairing a Road(floyd算法)
- 二叉排序树