(五)spring 自动装配

本文介绍了Spring框架中的自动装配机制,包括byType和byName两种主要装配方式,并通过实例展示了如何在XML配置文件中使用autowire属性实现自动装配,同时讨论了自动装配的局限性和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML配置里的 Bean自动装配

自动装配: 只声明 bean, 而把 bean 之间的关系交给 IOC 容器来完成 

•Spring IOC 容器可以自动装配 Bean. 需要做的仅仅是<bean> autowire属性里指定自动装配的模式

byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 Bean 最合适该属性, 所以不能执行自动装配.

byName(根据名称自动装配): 必须将目标 Bean 的名称和属性名设置的完全相同.

•constructor(通过构造器自动装配): 当 Bean 中存在多个构造器时, 此种自动装配方式将会很复杂.不推荐使用


那么在xml文件中<bean>文件中,属性autowire=" ", " "内可以是byName或byType 等

——byType: 根据类型进行自动装配. 但要求 IOC 容器中只有一个类型对应的 bean, 若有多个则无法完成自动装配.

——byName: 若属性名和某一个 bean 的 id 名一致, 即可完成自动装配. 若没有 id 一致的, 则无法完成自动装配

在使用 XML 配置时, 自动转配用的不多. 但在基于 注解 的配置时, 自动装配使用的较多

例子:car和address,person类,其中person类中有car和address

car类

public class Car {

	private String name;
	private String brand;
	private int price;
	//省略get和set方法
	 
	@Override
	public String toString() {
		return "Car [name=" + name + ", brand=" + brand + ", price=" + price + "]";
	}
	
}
address类

public class Address {

	private String city;
	private String street;
	 //省略get和set方法
	@Override
	public String toString() {
		return "Address [city=" + city + ", street=" + street + "]";
	}
	
}
person类

public class Person {

	private String name;
	private int age;
	private Address address;
	private Car car;
	//省略get和set方法
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", address=" + address + ", car=" + car + "]";
	}
	
}
xml文件的配置如下

	<bean id="car" class="com.beans.autowire.Car">
		<property name="name" value="audi"></property>
		<property name="brand" value="shanghai"></property>
		<property name="price" value="300000"></property>
	</bean>
	
	<bean id="address" class="com.beans.autowire.Address">
		<property name="city" value="shanghai"></property>
		<property name="street" value="nanjinglu"></property>
	</bean>
	
	<bean id="person" class="com.beans.autowire.Person" autowire="byName">
		<property name="name" value="xiaoming"></property>
		<property name="age" value="22"></property>
		<!-- 如果不使用自动装配会有下面的配置代码,启用了autowire则不需要了 -->
		<!-- <property name="address" ref="address"></property>
		<property name="car" ref="car"></property> -->
	</bean>
上面就是一段完整的是autowire的方法。这样可以减少代码的编写,但是同样也就缺点,

•在 Bean 配置文件里设置 autowire 属性进行自动装配将会装配 Bean 的所有属性. 然而, 若只希望装配个别属性时, autowire 属性就不够灵活了.
•autowire 属性要么根据类型自动装配, 要么根据名称自动装配, 不能两者兼而有之.
•一般情况下,在实际的项目中很少使用自动装配功能,因为和自动装配功能所带来的好处比起来,明确清晰的配置文档更有说服力一些





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值