spring注入bean进入工具类的静态方法

该博客讨论了如何在Spring框架中将Bean注入到一个工具类的静态方法中,以实现方便的数据库操作。示例中展示了如何将MongoDynamicTemplateSource动态Mongo模板注入到DBContextHolder工具类,使得在静态方法中可以轻松调用MongoTemplate进行数据库交互。

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

package com.caiwufei.common.db;

import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import com.caiwufei.common.db.mongo.MongoDynamicTemplateSource;

@Component
public class DBContextHolder{
	
	@Autowired
	private MongoDynamicTemplateSource dynamicTemplateSource;
	
	private static DBContextHolder dbContextHolder;
	
	private static final ThreadLocal<String> dbName = new ThreadLocal<String>();
	
	private static final ThreadLocal<String> mongoTemplate = new ThreadLocal<String>();
    
    @PostConstruct
	public void init() {
		dbContextHolder = this;
		dbContextHolder.dynamicTemplateSource = this.dynamicTemplateSource;
	}

	public void setMongoTemplateSource(MongoDynamicTemplateSource mongoTemplateSource) {
		this.dynamicTemplateSource = mongoTemplateSource;
	}

	public static class DB {
		
		public static void changeTargetDataSource(String dataKey){
			dbName.set(dataKey);
		}
		
		public static String getTargetDataSource(){
			return dbName.get();
		}
	}
	
	public static class Mongo {
		
		public static void changeTargetMongoTemplate(String mongoTemplateKey){
			mongoTemplate.set(mongoTemplateKey);
		}
		
		public static String getTargetMongoTemplate(){
			return mongoTemplate.get();
		}
		
	}
	
	public static MongoTemplate mongoTemplate() {
		return dbContextHolder.dynamicTemplateSource.getMongoTemplate();
	}

}


看上面的代码,工具类DBContextHolder中注入了private MongoDynamicTemplateSource dynamicTemplateSource动态的mongodb模板。

通过设计这个工具类,既是spring中的一个bean,又是一个工具类,静态方法可以直接DBContextHolder.Mongo.getTargetMongoTemplate();这样使用。

模板大致如下:

class O{
	@Autowired
	private D d;
	
	private static O o;
	
	@PostConstruct
	public void init() {
		o = this;
		o.d = this.d;
	}
	
	public void setD(D dd) {
		this.d = dd;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值