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:。。。。。
该对象已销毁