##一、Spring中的FactoryBean
首先,让我们先来看一看FactoryBean接口的定义,由此可见,FactoryBean也是用来创建bean的,它所创建的bean即为它后面所跟泛型对应的类型的实例。
package org.springframework.beans.factory;
public abstract interface FactoryBean<T> {
public abstract T getObject() throws Exception;
public abstract Class<?> getObjectType();
public abstract boolean isSingleton();
}
其中,getObject()方法返回创建的对象,getObjectType()方法返回创建的对象的类型,isSingleton()方法表示此对象是否为单例。
举个例子来看一下:
(1)User.java
先定义一个对象,此对象即为我们即将要实现的FactoryBean要创建的对象。
package com.alan.spring.extensionpoints;
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "name: "+name+", age: "+age;
}
}
(2)UserFactoryBean.java
创建上述对象的FactoryBean,实现了FactoryBean、InitializingBean、DisposableBean接口,其中InitializingBean接口主要是为了在UserFactoryBean的初始化方法afterPropertiesSet()中创建User的实例,DisposableBean接口主要与InitializingBean接口配对,并打印销毁日志。
package com.alan.spring.extensionpoints;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
public class UserFactoryBean implements FactoryBean<User>, InitializingBean, DisposableBean{
private User user;
@Override
public void destroy() throws Exception {
System.err.println("u