spring学习(2)-对象创建的细节

1. id 和 name

 

name : 可重复的,可以有特殊字符的
id: 不可重复的,不可有特殊字符的

2. 工厂的类型

ClassPathXmlApplicationContext

参数为文件名,处理的时候是有添加默认的类路径的,类路径即classPath,一般是定位到项目的bin文件和引用的包,可以使用java.class.path查看

//下面的参数等价于classPath:application.xml
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");

FileSystemXmlApplicationContext

参数为包含文件路径的文件名,处理的时候有添加默认的文件路径,一般是定位到项目文件夹,可以输出System.getProperty("user.dir")进行查看

//下面的参数等价于File:src\\applicatioin.xml
ApplicationContext context = new FileSystemXmlApplicationContext("src\\applicatioin.xml");

3. 单例和多例

单例模式

配置文件中scope的属性值默认为"singleton",产生的类对象都是单例模式的


 
 
        
public class IOCTest {
    @Test
    public void testScpe() {
        //创建容器
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //创建对象
        Person p1 = (Person)context.getBean("p");
        Person p2 = (Person)context.getBean("p");
        // true
        System.out.println(p1==p2);
    }
}

容器启动时创建对象,设置lazy-init="true"后,变成创建对象时才创建。

多例模式

scope="prototype" 变成多例模式,容器启动时不创建对象,创建对象的时候才创建对象


public class IOCTest {
    @Test
    public void testScpe() {
        //创建容器
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //生产对象
        Person p1 = (Person)context.getBean("p");
        Person p2 = (Person)context.getBean("p");
        // false  
        System.out.println(p1==p2);
    }
}

5. 对象的初始化和销毁方法


通过设置init-method和destroy-method可以设置初始化方法和销毁方法
初始化方法早生成对象的时候会调用
而销毁的方法需要通过两种方式调用

//使用抽象容器调用destroy()
AbstractApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
//主动调用destroy方法执行销毁
context.destroy();
//或者调用close方法触发
context.close();

你可能感兴趣的:(spring学习(2)-对象创建的细节)