spring 自动装配
--SpringIOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性指定自动装配模式。
--byType:根据类型自动装配,若IOC容器中有多个与目标Bean类型一致的Bean,在这种情况下,Spring将无法判断那个Bean最合适属性,所以不能进行自动装配。
--byName:根据名称自动装配,必须将目标Bean的名称(id值)和属性名设置的完全相同。
缺点:
--在Bean配置文件里设置autowire属性进行自动装配将会配置Bean的所有属性,然而,若只想装配个别属性时,不够灵活。
--autowire属性要么根据类型,要么根据名称自动装配,不能同时指定。
--一般情况下很少使用自动装配功能,因为明确指定更有说服力。
例子:
Person类:
package com.xia.entity; public class Person { private String name; private int age; private Car car; private Address address; @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", car=" + car + ", address=" + address + "]"; } public Car getCar() { return car; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public void setCar(Car car) { this.car = car; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Car类:
package com.xia.entity; public class Car { private String cname; private double price; public Car(String cname, double price) { super(); this.cname = cname; this.price = price; } @Override public String toString() { return "Car [cname=" + cname + ", price=" + price + "]"; } public Car() { super(); } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } }
Address类:
package com.xia.entity; public class Address { private String city; private String street; public Address() { super(); // TODO Auto-generated constructor stub } 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; } @Override public String toString() { return "Address [city=" + city + ", street=" + street + "]"; } }
byName:
<bean id="address" class="com.xia.entity.Address"> <property name="city" value="beijing"></property> <property name="street" value="huiLongGang"></property> </bean> <bean id="car" class="com.xia.entity.Car"> <property name="cname" value="宝马"></property> <property name="price"> <value>188</value> </property> </bean> <!-- 可以使用autowire属性指定自动装配的方式, byName 根据bean的名字和当前bean的属性名进行自动装配 ,若有匹配的则进行自动装配,若没有匹配的则不匹配。 --> <bean id="personBean" class="com.xia.entity.Person" autowire="byName"> <property name="name" value="夏文杰"></property> <property name="age"> <value>18</value> </property> </bean>
byType:
<!--byType 根据bean的类型和当前Bean的属性的类型进行自动装配,若IOC容器中有一个以上的类型匹配bean,则抛异常-->
<bean id="personBean" class="com.xia.entity.Person" autowire="byType">
<property name="name" value="夏文杰"></property>
<property name="age">
<value>18</value>
</property>
</bean>
Test:
ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Person p = (Person) ac.getBean("personBean"); System.out.println(p.toString());
输出:
Person [name=夏文杰, age=18, car=Car [cname=宝马, price=188.0], address=Address [city=beijing, street=huiLongGang]]

浙公网安备 33010602011771号