House类:只有一个People属性,验证引用的ref引用bean的set方法注入方式spring
package com.zhiwei.autowire; public class House { private People people; public People getPeople() { return people; } public void setPeople(People people){ this.people=people; }[@Override](https://my.oschina.net/u/1162528) public String toString() { return "House [people=" + people + "]"; } }
People类:存在一个name和Dog属性,主要时验证普通的set方法的值注入app
package com.zhiwei.autowire; /** * People类:属性:name,dog */ public class People { private String name; private Dog dog; public String getName() { return name; } public void setName(String name) { System.out.println("People is running setting.......");this.name = name; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } @Overridepublic String toString() { return "People [name=" + name + ", dog=" + dog + "]"; } }
dog:一个属性:dogName:测试构造方法属性值的注入ide
package com.zhiwei.autowire; public class Dog { private String dogName; public String getDogName() { return dogName; } public void setDogName(String dogName) { this.dogName = dogName; } public Dog(String dogName) { System.out.println("Dog is initting by coustructor..........");this.dogName = dogName; } [@Override](https://my.oschina.net/u/1162528) public String toString() { return "Dog [dogName=" + dogName + "]"; } }
Spring的配置文件:applicationContext.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" xmlns:tx="http://www.springframework.org/schema/tx" 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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- default-autowire="autodetect" 设置默认的装配方式:default检测 --> <!-- 构造函数注入dogName属性 --> <bean id="dog" class="com.zhiwei.autowire.Dog"> <constructor-arg index="0" value="xiaohua"/> </bean> <!-- 经过普通属性注入name属性:set byName: people属性dog,若是IOC容器里面存在id=dog的对象则自动关联(注意类型必须匹配) byType:people属性dog,若是IOC容器存在和dog一致的bean则自动关联(不容许存在多个目标相同类型的bean) --> <bean id="people" class="com.zhiwei.autowire.People" autowire="byName"> <property name="name" value="squirrel"/> </bean> <!-- 经过set方法注入people属性 --> <bean id="house" class="com.zhiwei.autowire.House"> <property name="people" ref="people"/> </bean> </beans>
测试类:测试
package com.zhiwei.autowire; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Spring装配:建立IOC容器中bean的写做关系的行为称为装配wiring * bean注入的方式: * 1: property:直接属性注入(set) * 2:constructor-arg:构造函数注入:index 表示参数的序列号 * 注意:使用ref关联外部bean的bEAN不能包含构造方法,不然报错,ref关联属性只能经过set注入 * * 构造方法顺序:默认构造方法注入---->set属性注入 * * bean初始化顺序:实例化bean按照applicationContext.xml配置顺序实例化 * * 装配类型: * @resource:byName-->byType,匹配不上报错 * @autowired:byType:匹配不上报错 * * byName:IOC容器中的bean初始化时未找到初始化对象则根据属性名和IOC容器中id相同的bean关联,注意最后是经过构造函数 注入对象 * byType:Bean初始化时未指定默认的属性值,则更具属性类型一致的其余bean关联 * constructor:将关联的对象做为构造函数的参数装配进当前bean * autodetect:自动检测当前的byType和constuctor装配方式,不行则报错 * default:beans设置的默认装配方式:default-autowire="autodetect" * no:无默认配置方式 */ public class MainTest { public static void main(String[] args) { //初始化IOC容器ApplicationContext ac= new ClassPathXmlApplicationContext("com/zhiwei/autowire/applicationContext.xml"); House house=(House) ac.getBean("house"); System.out.println("house:"+house); People people=(People) ac.getBean("people"); System.out.println("people:"+people);}}