SpringIoC入门 工厂创建对象 单例和多例

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 {
    
    
    //没有静态方法,所以必须先要new 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"/>

猜你喜欢

转载自blog.csdn.net/xinxin_____/article/details/108968468