首先明确xml文件中的一些配置:
id和name:表示标识这个<bean>节点,name可以有特殊字符scopebean的生存范围,有singleton(单例,默认)、prototype(非单例)、request、session、globalsessionclass表示关联的类文件名称(包名 + 类名)value注入基本数据类型或字符串ref注入一个对象引用factory-bean调用的工厂Bean实例factory-method调用的工厂方法<property>节点可以调用类中的setter方法,name对应参数名称,value对应参数值。<constructor-arg>节点可以调用类中的构造器,name对应参数名称,value对应参数值。一:通过构造函数创建对象。
1.无参构造函数+setter方法注入值
package com.spring.bean;public class Person { private String name; private Integer id; public String getName() { return name; } public void setName(String name) {//调用这个 this.name = name; } public Integer getId() { return id; } public void setId(Integer id) {//调用这个 this.id = id; }}
XML配置:
2 利用有参构造函数直接注入
package com.mc.base.learn.spring.bean;public class Person { private String name; private Integer id; public Person(String name, Integer id) {//调用这个 super(); this.name = name; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }}
xml配置:
二.静态工厂创建(使用静态方法)
静态工厂的对象,在容器加载的时候就被创建了。
public static Person createPerson(Integer id,String name){ return new Person(name,id); }
xml:
三、通过实例工厂方式创建对象
实例工厂就是通过实例来调用对象,但是所得到的对象最终也是单例模式。实例工厂和静态工厂创建的对象都是单例模式,两者的区别就是创建对象的实际不同,静态工厂是在创建容器的时候就创建了,实例工厂是在调用方法的时候才创建。
public class PersonFactory { //非静态方法返回实例 public Person createInstance() { return new Person(); }}
xml:
四.自动装配
在bean节点中, 添加autowire属性来完成自动装配的操作
1,no : 默认设置 , 表示关闭自动装配 2,byName : 通过名称完成自动装配: 例如: 当前我们容器中存在一个对象, id为book;而刚好当前的这个person类中有一个名称为book的属性 那么这个时候, 我们的容器, 会自动完成两个对象的关联 byName 不会判断传入的参数类型是否匹配, 只要名称相同, 就会强行建立依赖关系 , 导致报错!3, byType : 通过类型完成自动装配
例如: 当前我们容器中存在一个Book类的对象而刚好我们当前的Person有一个Book类型的属性我们的容器, 就会自动完成两个对象的关联。如果存在多个同类型对象则报错 4,constructor 与byType的方式类似,不同之处在于它应用于构造器参数 5,autodetect 通过bean类来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType