Spring 自动装配的内容

版权声明:博客知识产权来源命运的信徒,切勿侵权 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属性是唯一确认的!

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/85112561