DI依赖注入的一些小概念 (今日份学习记录)

本文探讨了在Spring框架中如何解决单例对象依赖于多例对象的问题。通过实现BeanFactoryAware接口,单例对象可以在运行时通过BeanFactory获取多例对象,避免了直接的依赖注入。这一技巧对于理解和解决复杂依赖关系非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在单例中(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;
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值