美文网首页
spring学习(2)-对象创建的细节

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

作者: 梦落迹南天 | 来源:发表于2018-07-04 17:05 被阅读0次

    1. id 和 name

    <bean name="p" id="p" class="xxxxx"> </bean>
    

    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",产生的类对象都是单例模式的

    <!--下述两种配置相等-->
     <bean name="p" class="com.woder.spring.pojo.Person"  scope="singleton"></bean>
     <bean name="p" class="com.woder.spring.pojo.Person" ></bean>
            
    
    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" 变成多例模式,容器启动时不创建对象,创建对象的时候才创建对象

    <bean name="p" class="com.woder.spring.pojo.Person" scope="prototype" ></bean>
    
    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. 对象的初始化和销毁方法

    <bean name="p" class="com.woder.spring.pojo.Person"  init-method="init" destroy-method="destroy()" ></bean>
    

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

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

    相关文章

      网友评论

          本文标题:spring学习(2)-对象创建的细节

          本文链接:https://www.haomeiwen.com/subject/xyvduftx.html