Spring Bean Autowire(自动装配)

Spring Bean Autowire(自动装配)

1.Autowire byName

spring容器在XML配置中查找bean,其名称与类属性名称相同。如果在我们的XML配置中有多个具有不同bean名称的相同类的bean,则自动装配不会发生冲突,并将匹配的bean名称与类属性名称一起使用。在我们的示例中找到用作bean的类。

Address.java

public class Address {
	private String city;
	private String state;
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
}  

Employee.java

public class Employee {
	
	private String empName;
	
	@Autowired
	private Address address;

	public String getEmpName() {
		return empName;
	}

	public void setEmpName(String empName) {
		this.empName = empName;
	}

	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}
}

SpringDemo.java

public class SpringDemo {
	
	public static void main(String[] args) {
		AbstractApplicationContext context = new ClassPathXmlApplicationContext("application-config.xml");
		Employee employee = (Employee) context.getBean("employee");
		System.out.println(employee.getEmpName());
		System.out.println(employee.getAddress().getCity());
		System.out.println(employee.getAddress().getState());
		context.close();		
	}
}

application-config.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" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
	<context:component-scan base-package="com.example.demo" />

	<bean name="address" class="com.example.demo.Address">
		<property name="city" value="Varanasi" />
		<property name="state" value="Uttar Pradesh" />
	</bean>
	<bean name="address2" class="com.example.demo.Address">
		<property name="city" value="Bhopal" />
		<property name="state" value="Madhya Pradesh" />
	</bean>
	<bean name="employee" class="com.example.demo.Employee"
		autowire="byName">
		<property name="empName" value="Manohar Parikar" />
	</bean>
</beans> 
2.Autowire byType

在byType自动装配的情况下,spring容器查找类类型。如果在XML配置中存在多个符合条件类类型,则容器将抛出错误,在类型自动装配的情况下可能发生三种情况。
1.如果在容器中,只有一个所需类类型的bean,则执行自动装配。
2.如果容器中有多个具有相同类类型的bean,则会引发致命错误并且不执行自动装配。
3.如果容器中没有所需类型的bean,无法执行自动装配,也不会抛出错误。

3.Autowire constructor

constructor自动装配类似于byType自动装配。在constructor自动装配的情况下,spring容器仅实现构造函数参数自动装配。
1.如果在spring容器中,只存在一个构造函数参数的自动装配候选bean,则执行基于构造函数的依赖性。
2.如果有多个相同类类型的bean,则不会执行自动装配并抛出致命错误。
3.如果构造函数自动装配没有所需类类型的bean,则抛出错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值