您的位置:首页 > 编程语言 > Java开发

Spring autowire 自动装配简介

2016-05-19 23:36 471 查看

Spring autowire 自动装配简介

注意本文与一般spring 标注@Autowire 无关

如下例子定义了3个类 Dperson Dcar & Daddress

其中Dperson 要引用另外两个类

Dperson

package com.home.autowire;

public class Dperson {
private String name;
private Dcar car;
private Daddress address;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Dcar getCar() {
return car;
}

public void setCar(Dcar car) {
this.car = car;
}

public Daddress getAddress() {
return address;
}

public void setAddress(Daddress address) {
this.address = address;
}

@Override
public String toString() {
return "Dperson [name=" + name + ", car=" + car + ", address="
+ address + "]";
}

}


Dcar

package com.home.autowire;

public class Dcar {
private String brand;
private int price;

public String getBrand() {
return brand;
}

public void setBrand(String brand) {
this.brand = brand;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

@Override
public String toString() {
return "Dcar [brand=" + brand + ", price=" + price + "]";
}

}


Daddress

package com.home.autowire;

public class Daddress {
private String city;
private String street;
private int number;

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getStreet() {
return street;
}

public void setStreet(String street) {
this.street = street;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

@Override
public String toString() {
return "Daddress [city=" + city + ", street=" + street + ", number="
+ number + "]";
}

}


一般的bean定义方法(xml)

注意下面引用了p Namespace

<bean id="car" class="com.home.autowire.Dcar" p:brand="Audi" p:price="10000"/>

<bean id="address" class="com.home.autowire.Daddress" p:city="Canton" p:street="teenho" p:number="103"/>

<!--  normal assemble -->
<bean id="person1" class="com.home.autowire.Dperson" p:name="Bill" p:car-ref="car" p:address-ref="address"/>


上面这个方法是最常用的, 也是最清晰的, 一般项目也推荐上面的方法。

autowire 自动装配

在这个例子种, 所谓autowire 自动装配就是指 不用在Dperson类的bean中手动指定每个属性的值, spring会根据ByName或者ByType去找

ByName:

<bean id="car" class="com.home.autowire.Dcar" p:brand="Audi" p:price="10000"/>

<bean id="address" class="com.home.autowire.Daddress" p:city="Canton" p:street="teenho" p:number="103"/>

<!--  auto wire-->
<bean id="person2" class="com.home.autowire.Dperson" p:name="Lily" autowire="byName"/>


上面的例子例子, bean person2 会在spring xml种查找有没有 跟属性名一样名字的bean, 有就装配, 没有则赋值null

ByType:

<bean id="car1" class="com.home.autowire.Dcar" p:brand="Audi" p:price="10000"/>

<bean id="address1" class="com.home.autowire.Daddress" p:city="Canton" p:street="teenho" p:number="103"/>

<!--  auto wire byType-->
<bean id="person3" class="com.home.autowire.Dperson" p:name="Jessie" autowire="byType"/>


万一找不到跟属性名一样的bean, 也可以通过byTime来自动装配的

小结

autowire会令到spring 配置文件更加简介, 但是可读性下降了, 一般情况下其实不建议使用, 但是某些特殊情况, 例如spring 嵌入其他framework(strurt2 hibernate), autowire有时的确会使程序猿更加方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: