03-对象创建的细节

一、id和name
name:可重复性,可以有特殊字符
id:不可重复,不可以有特殊字符的
@Test
public void testIdAndName() {

    //创建容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //查找对象
    Person p1 = (Person)context.getBean("p1");
    Person p2 = (Person)context.getBean("p2");
    System.out.println(p1);
    System.out.println(p2);
}

二、工厂的类型
常见有两种类型的工厂
ClassPathXmlApplicationContext(从类路径获取文件) 和 FileSystemXmlApplicationContext(从系统磁盘径获取文件)
@Test
public void ApplicationContext() {
//创建容器
ApplicationContext context = new FileSystemXmlApplicationContext(“D:\workspace_helen\web-gp1701\spring-01-hello\src\applicationContext.xml”);
}
三、单例和多例
配置 scope 属性
1、默认情况下bean是单例的, scope = “singleton”
2、多例配置 , scope = “prototype”
3、 scope = “request”(一个request范围内,是单例,不常用)
4、 scope = “session”(一个session范围内,是单例,不常用)
@Test
public void testScope() {

    //创建容器
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //查找对象
    Person p1 = (Person)context.getBean("p1");
    Person p2 = (Person)context.getBean("p1");
    
    //scope="singleton"时 值是true
    //scope="prototype"时 值是false
    System.out.println(p1 == p2); 
}

四、什么时候创建
scope=“prototype” (多例)时,在容器启动时不创建对象,当获取对象时才创建
scope=“singleton” (单例)时,在容器启动创建对象,而且只创建一个

五、是否延迟创建
注意:这个配置只对单例模式有效
lazy-init=“true” 延迟创建对象,容器启动时不创建,获取时再创建
lazy-init=“false” 默认值,不延迟创建对象,容器启动时立即创建

六、对象的初始化和销毁方法
bean配置:

Person中添加初始化和销毁方法:
public void init() {
System.out.println(“Person被初始化!”);
}
public void destroy() {
System.out.println(“Person被销毁!”);
}
测试:
@Test
public void testInitAndDestroy() {

    //创建容器
    AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    //主动调用destroy方法执行销毁
    //context.destroy();
    //或者调用close方法,触发销毁
    context.close();
    
}

是否将当前网页翻译成中文 网页翻译

猜你喜欢

转载自blog.csdn.net/anhldd/article/details/84938873
03-