Spring工厂特性

1 饿汉式创建优势

工厂创建之后,会将Spring配置文件中的所有对象都创建完成(饿汉式)。

提高程序运行效率。避免多次IO,减少对象创建时间。(概念接近连接池,一次性创建好,使用时直接获取)

2 生命周期方法

  • 自定义初始化方法:添加“init-method”属性,Spring则会在创建对象之后,调用此方法。

  • 自定义销毁方法:添加“destroy-method”属性,Spring则会在销毁对象之前,调用此方法。

  • 销毁:工厂的close()方法被调用之后,Spring会毁掉所有已创建的单例对象。

  • 分类:Singleton对象由Spring容器销毁、Prototype对象由JVM销毁。

3 生命周期注解

初始化注解、销毁注解

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@PostConstruct //初始化 
public void init(){
    System.out.println("init method executed");
}

@PreDestroy //销毁
public void destroy(){
    System.out.println("destroy method executed");
}

4 生命周期阶段

单例bean:singleton

随工厂启动创建 ==》 构造方法 ==》 set方法(注入值) ==》 init(初始化) ==》 构建完成 ==》随工厂关闭销毁

多例bean:prototype

被使用时创建 ==》 构造方法 ==》 set方法(注入值) ==》 init(初始化) ==》 构建完成 ==》JVM垃圾回收销毁

 

用例:

User实体类

package com.cos.qf.entity;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.*;

public class User {
    private Integer id;
    private String password;
    private String sex;
    private Integer age;
    private Date bornDate;
    private String[] hobbys;
    private Set phones;
    private List names;
    private Map countries;
    private Properties files;


    @PostConstruct //初始化
    public void init(){
        System.out.println("被初始化了");
    }

    @PreDestroy //销毁
    public void destroy(){
        System.out.println("被销毁了");
    }
    
    public User() {
        System.out.println("执行了无参构造");
    }

    public void setId(Integer id) {
        System.out.println("set-id");
        this.id = id;
    }
//get和set方法
}

application-config.xml配置文件

 
 

测试方法不能用ClassPathXmlApplicationContext的父类(ApplicationContext)去关闭不然就报错

 @Test
    public void text4() {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("application-config.xml");
        ctx.close();
    }

Spring工厂特性_第1张图片 

结果: 

Spring工厂特性_第2张图片

 

 

你可能感兴趣的:(Spring,spring,java,工厂,生命周期)