接上文3.在容器中可以注入的类型1.字面量可以使用字符串表示的值可以通过 value 属性或 value 子节点的方式指定基本数据类型及其封装类、String 等类型都可以采取字面值注入的方式2.null值设置property 属性的子节点为null/bean ids5 classcom.helloworld.bean.Student property namestudentId value1001/ property namestuName null/ /property property nameage value20/ /bean3.内部 bean当 bean 实例仅仅给一个特定的属性使用时可以将其声明为内部 bean。内部bean 声明直接包含在property或constructor-arg元素里不需要设置任何 id 或 name 属性,内部 bean 不能使用在任何其他地方。内部 bean 不能使用在任何其他地方。bean idCustomerBean classcom.common.Customer property nameperson bean classcom.common.Person property namename valuehello / property nameaddress valueaddress1 / property nameage value28 / /bean /property /bean4.外部bean可以使用 ref 属性来引用已经定义的bean对象bean idCustomerBean classcom.common.Customer property nameperson refPersonBean / /bean bean idPersonBean classcom.common.Person property namename valuehello / property nameaddress valueaddress1 / property nameage value28 / /bean5.List注入配置 java.util.List 类型的属性需要指定list标签在标签里包含一些元素。这些标签可以通过value指定简单的常量值通过ref指定对其他 Bean 的引用。通过bean 指定内置 bean 定义。通过null/指定空元素。甚至可以内嵌其他集合。public class Customer { private ListString list; private ListPerson persons; } public class Person{ private String name; private String address; private int age; //忽略get和set构造方法 } bean idcc classcom.spring.bean.Customer property name list !-- 以字面量为值的 List 集合 -- list value张三/value value李四/value /list /property property name persons list ref beanp1/ ref beanp2/ /list /property /bean bean idp1 classcom.common.Person property namename valuehello / property nameaddress valueaddress1 / property nameage value28 / /bean bean idp2 classcom.common.Person property namename valuehello / property nameaddress valueaddress1 / property nameage value28 / /bean6.Map注入Java.util.Map 通过map标签定义map标签里可以使用多个entry作为子标签。每个条目包含一个键和一个值。必须在key标签里定义键。因为键和值的类型没有限制所以可以自由地为它们指定value、ref、bean或null/元素。public class Customer { private MapString,Person map; } public class Person{ private String name; private String address; private int age; //忽略get和set构造方法 } bean idcc classcom.spring.bean.Customer property name map map entry key valueperson1/value /key ref beanp1/ /entry entry key valueperson2/value /key ref beanp2/ /entry /map /property /bean bean idp1 classcom.common.Person property namename valuehello / property nameaddress valueaddress1 / property nameage value28 / /bean bean idp2 classcom.common.Person property namename valuehello / property nameaddress valueaddress1 / property nameage value28 / /bean4.通过容器获取 bean1.通过name 值获取//1.创建IOC容器对象 ApplicationContext iocContainer new ClassPathXmlApplicationContext(配置文件路径); //2.根据id值获取bean实例对象 Student student (Student) iocContainer.getBean(配置文件实例对象的name);2.通过类型获取 bean//1.创建IOC容器对象 ApplicationContext iocContainer new ClassPathXmlApplicationContext(配置文件路径); //2.根据id值获取bean实例对象 Student student (Student) iocContainer.getBean(Student.class);3.通过类型和name获取 bean//1.创建IOC容器对象 ApplicationContext iocContainer new ClassPathXmlApplicationContext(配置文件路径); //2.根据id值获取bean实例对象 Student student (Student) iocContainer.getBean(name值,Student.class);5.容器的配置和关系1.配置信息的继承bean iddept classcom.parent.bean.Department property namedeptId value100/ property namedeptName valueIT/ /bean bean idemp01 classcom.parent.bean.Employee property nameempId value1001/ property nameempName valueTom/ property nameage value20/ !-- 重复的属性值 -- property namedept refdept/ /bean bean idemp02 classcom.parent.bean.Employee property nameempId value1002/ property nameempName valueJerry/ property nameage value25/ !-- 重复的属性值 -- property namedept refdept/ /bean经过继承后可以简化相同的配置信息bean iddept classcom.parent.bean.Department property namedeptId value100/ property namedeptName valueIT/ /bean bean idemp01 classcom.parent.bean.Employee property nameempId value1001/ property nameempName valueTom/ property nameage value20/ !-- 重复的属性值 -- property namedept refdept/ /bean !-- 以emp01作为父bean继承后可以省略公共属性值的配置 -- bean idemp02 parentemp01 property nameempId value1002/ property nameempName valueJerry/ property nameage value25/ /bean2.bean 之间的依赖有的时候创建一个 bean 的时候需要保证另外一个 bean 也被创建这时我们称前面的 bean 对后面的 bean 有依赖。例如要求创建 Employee 对象的时候必须创建 Department。这里需要注意的是依赖关系不等于引用关系Employee 即使依赖 Department 也可以不引用它。bean idemp03 classcom.parent.bean.Employee depends-ondept property nameempId value1003/ property nameempName valueKate/ property nameage value21/ /bean3.bean 的作用域在 Spring 中可以在bean元素的 scope 属性里设置 bean 的作用域以决定这个 bean 是单实例的还是多实例的。默认情况下Spring 只为每个在 IOC 容器里声明的 bean 创建唯一一个实例整个 IOC 容器范围内都能共享该实例所有后续的 getBean()调用和 bean 引用都将返回这个唯一的 bean 实例。该作用域被称为 singleton它是所有 bean 的默认作用域。