在单例中(singleton)的对象不能通过常规的注入方法来注入一个多例(prototype)的对象
我们可以通过在单例的类中实现BeanFactoryAware接口,这个接口有一个方法:setBeanFactory,spring在创建单例对象的时候,会把BeanFactory进行注入,这样在单例中,我们可以通过BeanFactory.getBean 进行获取多例对象。
package cn.com.leadfar.spring;
import java.io.File;
import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
public class UserService implements BeanFactoryAware{
// private ExcelTransfer transfer;
private BeanFactory factory;
private String saveDir;//储存位置
private int maxFile;//最大文件数量
private List list;
//通过构造方法注入
public UserService(String saveDir,int maxFile,List list) {
this.saveDir=saveDir;
this.maxFile=maxFile;
this.list=list;
}
public void addUser(){
System.out.println("UserService.addUser()");
}
public void uploadExcel(File f) {
ExcelTransfer transfer=(ExcelTransfer)factory.getBean("excelTransfer");
transfer.transfer(f);
System.out.println("储存的位置和文件的数量"+":"+saveDir+","+maxFile);
}
// public void setTransfer(ExcelTransfer t) {
// this.transfer=t;
//
// }
@Override
public void setBeanFactory(BeanFactory f) throws BeansException {
// TODO Auto-generated method stub
this.factory=f;
}
}