第五章第七节-自动装配Bean

 

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">       按照spring的HelloWorld搭建一个java项目。本节涉及的内容Car.java、House.java、Person.java三个bean类Car和house是Person的成员。MainTest.java含main方法的测试类。spring.xml容器的配置文件。(结尾有完整的代码)</span>

 

一、自动装配Bean

      该表是autowired属性的每个取值的作用,下面来逐一讨论。

 

属性值

作用

byName

通过查找与setter风格的属性相匹配的bean id来进行属性注入。

byType

通过属性的类型查找与之匹配的bean,如果有多个bean的类型一样则会抛出异常。

constructor

通过自己的带参构造器来查找类型匹配的bean,而且必须要完全匹配构造器的参数,同时以参数多的优先。

default

表示与beans的设置autowired相同,或者沿用父类的设置。

no

表示不使用该属性

     1, 先来看一下xml文件的配置,这里先使用byName的形式。这种方式会通过Person的setCar和setHouse的方法与配置文件中bean的id进行匹配,然后匹配的car和house两个bean注入到person1的属性中去。(详细的代码见结尾,下同)

 

	<bean id="person1" class="com.escore.beans.Person"
		autowire="byType">
		<property name="name" value="Jerry"></property>
	</bean>

 

      2,现在将autowired的取值更换为byType。这种方式则会通过Person的setCar和setHouse的方法的参数类型与配置文件的bean的class类型进行匹配,然后再注入相应属性。如果在匹配class类型时有多个则会出现错误。

      3,如果是使用constructor的取值,则是通过Person的带参数的构造函数的参数进行匹配,本项目中,则是用Person(Car car, House house)来进行匹配。匹配的方式和byType一样。匹配的时候必须是该构造器全部参数都匹配上才可以,而且是尽量匹配参数多的构造器。

       关于default和no就不再介绍了。前者是默认使用上一级的设置,注入的方式还是上面三种;no就是不使用该特性。

-----------------------------------------------------完整的代码----------------------------------------------------------------------------

Car.java

 

public class Car {

	private String brand;


	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	@Override
	public String toString() {
		return "Car [brand=" + brand + "]";
	}

}

 

House.java

 

public class House {

	private String address;

	public String getAddress() {
		return address;
	}

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

	@Override
	public String toString() {
		return "House [address=" + address + "]";
	}

}

Person.java

 

 

public class Person {

	private String name;
	private Car car;
	private House house;

	public Person() {
	}

	public Person(Car car1) {
		this.car = car1;
	}

	public Person(Car car, House house) {
		super();
		this.car = car;
		this.house = house;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Car getCar() {
		return car;
	}

	public void setCar(Car car) {
		this.car = car;
	}

	public House getHouse() {
		return house;
	}

	public void setHouse(House house) {
		this.house = house;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", car=" + car + ", house=" + house + "]";
	}

}

MainTest.java

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.escore.beans.Person;

public class MainTest {
	
	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
		
		Person person = (Person) ctx.getBean("person1");
		System.out.println(person);
		
		ctx.close();
	}
	
}

spring.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">

	<bean id="car" class="com.escore.beans.Car">
		<property name="brand" value="BMW"></property>
	</bean>
	<bean id="house" class="com.escore.beans.House">
		<property name="address"><value><![CDATA[<XiangJiangRod.168#>]]></value></property>
	</bean>
	
	<bean id="person1" class="com.escore.beans.Person"
		autowire="byType">
		<property name="name" value="Jerry"></property>
	</bean>

</beans>

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值