版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/85112561
介绍:当一个类中有多个复杂属性的时候,可以通过bean名称用ref指向,也可以自动装配
自动装配的两个常用的方式:autowire="byType";autowire="byName"
但是在实际开发中是用不到自动装配的;因为它的两种方式不可以混合使用,不灵活;
下面我们通过一个例子来了解一下吧
三个类
package cn.com.day03;
public class Person {
private String name;
private Cars c;
private Address a;
public void setName(String name) {
this.name = name;
}
public void setC(Cars c) {
this.c = c;
}
@Override
public String toString() {
return "Person [name=" + name + ", c=" + c + ", a=" + a + "]";
}
public void setA(Address a) {
this.a = a;
}
}
package cn.com.day03;
public class Cars {
private String brand;
private String price;
public void setBrand(String brand) {
this.brand = brand;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "Cars [brand=" + brand + ", price=" + price + "]";
}
}
package cn.com.day03;
public class Address {
private String add;
private String id;
public void setAdd(String add) {
this.add = add;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Address [add=" + add + ", id=" + id + "]";
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="c" class="cn.com.day03.Cars" p:brand="baoma" p:price="900000"></bean>
<bean id="a" class="cn.com.day03.Address" p:add="anhui" p:id="1203"></bean>
<bean id="person" class="cn.com.day03.Person"
p:name="tjn"
autowire="byName">
</bean>
</beans>
测试类
package cn.com.day03;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestMain {
public static void main(String[] args) {
//1.创建ioc容器
ApplicationContext cox=new ClassPathXmlApplicationContext("AutoWire.xml");
//2.获取bean
Person p=(Person) cox.getBean("person");
System.out.println(p);
}
}
结果如下
注意的地方:
Person类中有两个复杂属性Cars c和Address a;
扫描二维码关注公众号,回复:
4600286 查看本文章
通过byName装配的,自动匹配的bean的id="名称"和Person类中set方法名要一致;
什么意思?
就是说根据名称匹配的,就是在配置文件中和set方法的名称一致的bean名字
Person类中自动装配Cars和Address两个属性,这两个属性的set方法的名称是setC和setA,那么C和A的第一个字母小写之后是c和a,在配置文件中找bean id="c"和id="a"的就可以了
不足之处:对名称匹配要求苛刻
根据byType就是set方法的类型和bean类型一致
不足之处就是一个类可以有多个bean属性,但是这个方法要求类的bean属性是唯一确认的!