版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011171125/article/details/85223781
Spring入门学习 第四节
自动装配
- 分别创建三个类
Address.java
,Car.java
,Person.java
其中Perosn类包含有Address和Car的属性package com.fafa.spring.autowire; public class Address { private String city; private String street; 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 + "]"; } }
package com.fafa.spring.autowire; public class Car { private String brand; private double price; public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public String toString() { return "Car [brand=" + brand + ", price=" + price + "]"; } }
package com.fafa.spring.autowire; public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Person [name=" + name + ", address=" + address + ", car=" + car + "]"; } }
- 创建相应的bean配置文件
beans-autowire.xml
在之前是通过bean的引用来给属性赋值,现在可以使用自动装配的方式直接赋值。<bean id="address" class="com.fafa.spring.autowire.Address" p:city="NanJing" p:street="QiXiaQu"></bean> <!-- <bean id="address2" class="com.fafa.spring.autowire.Address" p:city="Dao" p:street="XuanWuQu"></bean> --> <bean id="car" class="com.fafa.spring.autowire.Car" p:brand="Audi" p:price="300000"></bean>
Autowire可以<!-- 通过ref引用来赋值的 --> <bean id="person" class="com.fafa.spring.autowire.Person" p:name="Tom" p:address-ref="address" p:car-ref="car"></bean>
byName
或byType
进行自动装配
byName根据bean的名字和当前bean的setter风格的属性名进行自动装配,若有匹配的则进行自动装配,若没有匹配的则不装配
byType根据bean的类型和当前bean的属性的类型进行自动装配,若IOC容器中有一个以上的类型匹配的bean,则抛出异常<!-- 可以使用autowire 属性指定自动装配的方式, byName根据bean的名字和当前bean的setter风格的属性名进行自动装配,若有匹配的则进行自动装配,若没有匹配的则不装配 byType根据bean的类型和当前bean的属性的类型进行自动装配,若IOC容器中有一个以上的类型匹配的bean,则抛出异常 --> <bean id="person" class="com.fafa.spring.autowire.Person" p:name="Tom" autowire="byType"></bean>
- 测试:
测试方法:
测试结果:@Test public void testPerson(){ ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:beans-autowire.xml"); Person person = (Person) ctx.getBean("person"); System.out.println(person); }
Person [name=Tom, address=Address [city=NanJing, street=QiXiaQu], car=Car [brand=Audi, price=300000.0]]