Spring--Bean的生命周期

Spring 的IOC容器负责对singleton作用域的bean实例进行管理,允许在生命周期的特定阶段执行特定的任务
1. 实例化
通过构造方法或者工厂来创建bean实例;当使用BeanFactory时,只有在调用getBean()方法真正获得bean实例时,才会具体的实例化某个对象;当使用ApplicationContext时,则会预先将所有的bean对象进行实例化,可以使用属性init-laze=”true”来设置延时加载。
2. 属性注入
调用set方法为属性赋值(当使用构造方法实例化对象,同时进行了属性的注入时,则没有此步骤)
3. 初始化
使用xml配置文件,<bean>标签中的init-method属性来设置初始化要执行的具体方法
4. 使用
具体调用实例对象的方法或者属性
5. 销毁,垃圾回收
使用<bean> 标签中的destroy-method 属性设置销毁时要执行的方法
注意:当bean的作用域scope=”prototype”时,没有此步骤,即prototype类型的实例,生命周期不受IOC容器管理
6. 代码示例:
配置文件

<bean id="book" class="com.oracle.vo.Book" init-method="init" destroy-method="destroy">
    <property name="isbn" value="1236"></property>
    <property name="bookName" value="活着"></property>
    <property name="price" value="65"></property>
</bean>

具体类

package com.oracle.vo;

import org.springframework.stereotype.Component;

@Component
public class Book {
    String isbn;
    String bookName;
    Integer price;

    @Override
    public String toString() {
        return "Book [isbn=" + isbn + ", bookName=" + bookName + ", price=" + price + "]";
    }
    public String getIsbn() {
        return isbn;
    }
    public void setIsbn(String isbn) {
        System.out.println("---给属性赋值---"+isbn);
        this.isbn = isbn;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        System.out.println("--给属性赋值--"+bookName);
        this.bookName = bookName;
    }
    public Integer getPrice() {
        return price;
    }
    public void setPrice(Integer price) {
        this.price = price;
    }
    public Book() {
        super();
        System.out.println("----调用构造方法----");
    }
    public Book(String isbn, String bookName, Integer price) {
        super();
        this.isbn = isbn;
        this.bookName = bookName;
        this.price = price;
    }
    //初始化方法
    public void init(){
        System.out.println("====调用init方法===");
    }
    //销毁方法
    public void destroy(){
        System.out.println("该对象已销毁");
    }
}

Junit测试:

    @org.junit.Test
    public void testInsert() {
        //创建工厂
        ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml");
        Book b1=(Book) factory.getBean("book");
        System.out.println(b1);
    }

输出结果

----调用构造方法----
---给属性赋值---1236
--给属性赋值--活着
====调用init方法===
Book [isbn=1236, bookName=活着, price=65]

当程序终止或出异常时:

----调用构造方法----
---给属性赋值---1236
--给属性赋值--活着
====调用init方法===
三月 19, 2018 12:09:56 下午 org.springframework.context.support.AbstractApplicationContext refresh
警告: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException:。。。。。
该对象已销毁

猜你喜欢

转载自blog.csdn.net/dingse/article/details/79609898
今日推荐