自动装配(自动为属性赋值)
1.项目目录
2.Emp.java
package com.atguigu.ioc.auto;
public class Emp {
private Integer eid;
private String ename;
//private Car car;//类型可以写该类以及该类的父类
private CarExtends car;
//private Dept dept;//类型可以写该类以及该类的父类
private DeptI dept;
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public CarExtends getCar() {
return car;
}
public void setCar(CarExtends car) {
this.car = car;
}
public DeptI getDept() {
return dept;
}
public void setDept(DeptI dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [eid=" + eid + ", ename=" + ename + ", car=" + car + ", dept=" + dept + "]";
}
}
3.CarExtends.java(Car的父类)
package com.atguigu.ioc.auto;
public class CarExtends {
}
4.Car.java
package com.atguigu.ioc.auto;
public class Emp {
private Integer eid;
private String ename;
//private Car car;//类型可以写该类以及该类的父类
private CarExtends car;
//private Dept dept;//类型可以写该类以及该类的父类
private DeptI dept;
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public CarExtends getCar() {
return car;
}
public void setCar(CarExtends car) {
this.car = car;
}
public DeptI getDept() {
return dept;
}
public void setDept(DeptI dept) {
this.dept = dept;
}
@Override
public String toString() {
return "Emp [eid=" + eid + ", ename=" + ename + ", car=" + car + ", dept=" + dept + "]";
}
}
5.DeptI.java(接口)
package com.atguigu.ioc.auto;
public interface DeptI {
}
6.Dept.java(DeptI接口的实现类)
package com.atguigu.ioc.auto;
public class Dept implements DeptI{
private Integer did;
private String dname;
public Integer getDid() {
return did;
}
public void setDid(Integer did) {
this.did = did;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
}
7.auto.xml
<?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">
<!--
autowire:根据某种策略自动未非字面量属性赋值
autowire="byName|byType"
byName:通过属性名和spring容器中bean的id进行比较,若一致则可直接赋值
byType:通过spring容器中bean的类型,为兼容性(子类对象为父类赋值,实现类为接口赋值)的属性赋值
在使用byType的过程中,要求spring容器中只能有一个能为属性赋值的bean
选用建议:当设置autowire属性,会最作用于该bean中所有的非字面量属性,因此谁都不用
-->
<bean id="emp" class="com.atguigu.ioc.auto.Emp" autowire="byName"><!-- byName/byType -->
<property name="eid" value="1001"></property>
<property name="ename" value="张三"></property>
<!-- <property name="car" ref="car"></property>
<property name="dept" ref="dept"></property> -->
</bean>
<bean id="car" class="com.atguigu.ioc.auto.Car">
<property name="cid" value="666666"></property>
<property name="cname" value="霸道"></property>
</bean>
<bean id="dept" class="com.atguigu.ioc.auto.Dept">
<property name="did" value="1111"></property>
<property name="dname" value="开发部"></property>
</bean>
</beans>
8.Test.java
package com.atguigu.ioc.auto;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac = new ClassPathXmlApplicationContext("auto.xml");
Emp bean = ac.getBean("emp", Emp.class);
System.out.println(bean);
}
}
9.运行结果
Emp [eid=1001, ename=张三, car=com.atguigu.ioc.auto.Car@31ef45e3, dept=com.atguigu.ioc.auto.Dept@598067a5]