Spring的IOC入门
方法区别
context
.getBean("id值", 类型
.class);
context
.getBean("id值");
bean标签的属性 id:bean标签的识别ID,理论上可以随便写 class:你要上Spring给你创建那个类的对象,需要协商该类的全部路径名赋值的方式有两个
Person person1
= new Person();
person1
.setId(1);
System
.out
.println(person1
);
Person person2
= new Person(1,"jack",20,new Date());
System
.out
.println(person2
);
name :成员变量的名字 value :成员变量的值 一个property标签最后会调一个对应的set方法
<bean id="person2" class="com.wzx.domain.Person" >
<property name="id" value="10"/>
<property name="name" value="rose"/>
<property name="age" value="20"/>
</bean>
通过构造方法创建对象
</bean>
<bean id="date1" class="java.util.Date"/>
<bean id="person3" class="com.wxx.domain.Person">
<constructor-arg name="id" value="10"/>
<constructor-arg name="name" value="hello"/>
<constructor-arg name="age" value="20"/>
<constructor-arg name="birthday" ref="date1"/>
</bean>
配置构造方法的参数的constructor-arg如果有四个,就表示调用的是一个含有四个参数的构造方法。value可以赋上基本类型数据与String,但是其他对象,需要使用ref表示在当前容器中查找一个已存在的对象
静态工厂创建对象
什么是静态工厂 XxxFactory.get();通过调用静态方法获取bean对象
public class PersonFactory{
public static Person
getBean(){
return new Person();
}
}
factory-method 指定获取对象的静态工厂的方法
<bean class="com.wzx.demo02.PersonFactory" factory-method="getBean" id="person4"/>
@Test
public void test03(){
Person person1
= (Person
)context
.getBean("person4");
log
.debug(person1
.toString());
}
实例工厂创建对象
什么是实例工厂 xxxFactory通过工厂对象调用成员方法获得bean对象 XxxFactory factory = new XxxFactory(); //实例化工厂对象 factory .yyy() //获得对象factory-bean创建工厂对象factory-method调用方法获得bean对象
public class PersonFactory2 {
public Person
getBean(){
return new Person();
}
}
<bean class="com.wxx.demo03.PersonFactory2" id="factory2"/>
<bean factory-bean="factory2" factory-method="getBean" id="person5"/>
@Test
public void test04(){
Person person1
= (Person
)context
.getBean("person5");
log
.debug(person1
.toString());
}
单例和多例
单例是什么? 内存中只有一个对象,每次获取到的该对象的地址值是相同的多实例是什么? 内存中的每次创建的对象都是一个新的对象,他们的地址值都是不同的问题1.每次获取对象的时候,spring是新创建一个对象还是始终给我们返回的是同一个对象答:spring默认的情况下创建的对象都是单例的,(每次返回的对象都是同一个)
scope
="singleton" 单例
(默认值
)
scope
="prototype" 多例
scope
="request" 创建的对象放到request域中
scope
="session" 创建对象放到session对象
多实例
<bean id="person" class="com.wzx.domain.Person" scope="prototype"/>
单实例
<bean id="person" class="com.wzx.domain.Person" scope="singleton"/>