spring中bean的自动装配
bean的自动装配其实就是自动赋值:
-
创建简单java类
package com.atguigu.bean; public class Person { private String lastName; private Integer age; private String gender; private String email; private Car car; public Person(Car car02) { super(); this.car = car02; } public void myInit(){ System.out.println("Person对象被初始化了"); } public void myDestory(){ System.out.println("Person对象被销毁了"); } public Person() { super(); System.out.println("Person对象被创建了"); } public Person(String lastName, Integer age, String gender, String email) { super(); this.lastName = lastName; this.age = age; this.gender = gender; this.email = email; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } @Override public String toString() { return "Person [lastName=" + lastName + ", age=" + age + ", gender=" + gender + ", email=" + email + ", car=" + car + "]"; } }
package com.atguigu.bean; public class Car { private String carName; public String getCarName() { return carName; } public void setCarName(String carName) { this.carName = carName; } public Car(String carName) { super(); this.carName = carName; } public Car() { super(); } @Override public String toString() { return "Car [carName=" + carName + "]"; } }
-
编写配置文件
<?xml version="1.0" encoding="UTF-8"?> <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.xsd"> <bean id="car" class="com.atguigu.bean.Car"> <property name="carName" value="宝马"></property> </bean> <bean id="car02" class="com.atguigu.bean.Car"> <property name="carName" value="比亚迪"></property> </bean> <!-- 为person的自定义属性赋值:手动赋值 --> <!-- <bean id="person" class="com.atguigu.bean.Person"> <property name="car" ref="car"></property> </bean> --> <!-- 自动赋值(自动装配):仅限于自定义类型 autowire="default/no":不自动装配 autowire="byName":以属性名(car)作为id去容器中找到这个组件,给它赋值,没找到则装配null autowire="byType":以属性类型作为查找依据去容器中找到这个组件,没找到则装配null autowire="constructor":按照构造器进行赋值,(需要有一个可以为car赋值的有参构造器) 流程: (1)按有参构造器参数的类型进行装配,没找到则装配null (2)如果按照类型找到多个,则按照有参构造器的参数名来进行装配 !!!如果是一个集合,容器可以把所有的相关属性进行封装。比如有一个car是一个list集合,那么按照autowire="byType"来装配的话会将所有的car全部装配至list集合中。 --> <bean id="person" class="com.atguigu.bean.Person" autowire="constructor"></bean> </beans>
-
测试
package com.atguigu.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.atguigu.bean.Person; public class TestAutomatic { /** * 为Person里面的自定义类型的属性赋值 * property:手动赋值 * 自动赋值(自动装配) */ @Test public void test(){ ApplicationContext context = new ClassPathXmlApplicationContext("automatic_assembly.xml"); Person person = context.getBean("person",Person.class); System.out.println(person); //Person [lastName=null, age=null, gender=null, email=null, car=Car [carName=比亚迪]] } }